esp 32, esp现在和MQTT连接



我试图用esp 32实现一些家庭自动化。我的项目如下

  1. 我有几个端点esp 8266像奴隶交换机发送Id数据到一个esp 32谁是我的网关。
  2. 从网关(esp8266)和主网关(esp 32)正在通信with espnow library
  3. 网关应该连接到mqtt服务器(rasperry pi)谁根据端点Id调度自动化命令。

目前esp8266从机和esp 32网关通信成功我还使用家庭自动化命令

成功地将我的rasperry PI设置为MQTT代理但是当我需要添加wifi连接和mqtt消息传递到我的ESP 32网关时,我被阻止了

我在esp32网关上的代码是
#include <esp_now.h>
#include <WiFi.h>
#include <PubSubClient.h> 
#define LED 2
int myData;
char ssid[] = "my ssid";     
char password[] = "mypass";  
char mqtt_server[] = "192.168.1.55";  
WiFiClient espClient;
PubSubClient MQTTclient(espClient);
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.print("data: ");
Serial.println(myData);
/*
if(myData == 1){
String reponse="device1";
MQTTclient.publish("homecommand",reponse.c_str());
}
*/

for (int t=0; t<3; t++)
{
digitalWrite(LED,HIGH);
delay(50);
digitalWrite(LED,LOW);
delay(50);
}


}
void MQTTconnect() {
while (!MQTTclient.connected()) {
Serial.print("Attente  MQTT connection...");
String clientId = "TestClient-";
clientId += String(random(0xffff), HEX);
// test connexion
if (MQTTclient.connect(clientId.c_str(),"","")) {
Serial.println("connected");
} else {  // si echec affichage erreur
Serial.print("ECHEC, rc=");
Serial.print(MQTTclient.state());
Serial.println(" nouvelle tentative dans 5 secondes");
delay(5000);
}
}
}
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
pinMode(LED,OUTPUT);

// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Init ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}

// Once ESPNow is successfully Init, we will register for recv CB to
// get recv packer info
esp_now_register_recv_cb(OnDataRecv);
/*
Serial.println("Connect to Wifi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("Connected");

MQTTclient.setServer(mqtt_server, 1883);
if (!MQTTclient.connected()) {
MQTTconnect();
}*/
}
void loop() {
// put your main code here, to run repeatedly:
}

代码工作得很好,当我触发我的一个奴隶时,我收到消息,将其串行打印并眨眼3次

但是当我取消评论关于连接到我的家庭路由器和我的mqtt代理的部分时,我失去了'On DataRecv'回调

所以我的问题是">是否有可能让Esp作为espnow网关工作以收集消息,同时连接到我的家庭路由器进行mqtt发布?";如果是,我会感激一些帮助来实现它。非常感谢。

Swap

WiFi.mode(WIFI_STA);

WiFi.mode(WIFI_AP_STA);

re:https://www.electrosoftcloud.com/en/esp32-wifi-and-esp-now-simultaneously/

最新更新