esp8266/esp32连接emqx和node-red数据显示

物联网设计从传感器到平台展示要经过联网模块进行数据通讯。esp8266和esp32可通过自编写程序进行联网和通信。

#include 
#include 
#include 
#include 
#include 
//WIFI设置
const char* wifi_name="连接到的wifi名字";
const char* wifi_password="连接的WiFi密码";

const char* mqtt_address="";//mqtt的地址
const char* topic_publish="";//硬件上传主题
const char* topic_subscrib="";//硬件订阅主题

//mqtt服务器连接的用户名和密码
const char* mqtt_username="";//设备用户名
const char* mqtt_password="";//设备密码
const int mqtt_poart=;//mqtt的端口号

//客户端变量
WiFiClient espclient;
PubSubClient client(espclient);

void callback(char *topic, byte *payload, unsigned int length);//收到mqtt端的消息的回调函数
void change_json();

byte rc_buf[100]; //接收数组
unsigned int len;
char messageBuff[1024];

void Serial_Init()
{
  Serial.begin(115200);
}

void Serial_receive_send()
{
  unsigned long startTime=millis();
  while(millis()-startTime<150)
  {
    while(Serial.available())
    {
      rc_buf[len++]=Serial.read();
    }
  }

  if(len!=0)
  {
    change_json();
    len=0;
  }

}
void wifi_Init()
{
  WiFi.mode(WIFI_STA);//设置wifi工作模式为STA(连接wifi),AP模式(作为热点),STA+AP(作为热点和连接wifi(默认))
  WiFi.begin(wifi_name,wifi_password);//连接wifi
  while (WiFi.status()!=WL_CONNECTED)
  {
    delay(300);
    Serial.write(".");
  }
  Serial.flush();
  Serial.print("\r\n");

  Serial.println("WiFi Connected!");
  Serial.flush();
  Serial.print("IP address:");
  Serial.flush();
  Serial.println(WiFi.localIP());
}


//服务器连接
void connect_mqtt()
{
  // 设置 MQTT 服务器的地址和端口
  client.setServer(mqtt_address, mqtt_poart);
  
  // 如果尚未连接,则尝试连接
  while(!client.connected())
  {
    // 定义客户端的 ID
    String client_id = "";
    // 打印出连接 MQTT 的信息
    Serial.println("connect mqtt");
    Serial.flush();
    // 尝试连接到 MQTT 服务器
    if(client.connect(client_id.c_str(), mqtt_username, mqtt_password))
    {
      // 连接成功后输出信息
      Serial.println("connect successful");
      Serial.flush();
    }
    else
    {
      // 如果连接失败,输出错误代码
      Serial.println("failed with state:" + String(client.state()));
      Serial.flush();
    }
    // 连接失败时等待 2 秒再尝试
    delay(2000);
  }
  //订阅主题
  client.subscribe(topic_publish);
  client.setCallback(callback);
}



//接收到的数据转为josn格式上传
void change_json()
{
  StaticJsonDocument<1024> doc;
  JsonObject root=doc.to();

  root[""]=;
  root[""]=;
  root["WIFI_IP:"]=WiFi.localIP().toString();
  serializeJson(doc,messageBuff);
  client.publish(topic_publish,messageBuff);
}


void setup() {
  Serial_Init();
  delay(2000);
  wifi_Init();
  connect_mqtt();
}

void loop() {
  Serial_receive_send();
 client.loop();
}

//收到mqtt的消息时回调,话题名称,接收到的信息,信息长度
void callback(char *topic, byte *payload, unsigned int length) {
}

连接结果

esp8266/esp32连接emqx和node-red数据显示_第1张图片

你可能感兴趣的:(物联网,iot,mcu,单片机,visual,studio,code)