ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网

之前对接了百度云,继百度云,载入阿里云alink写协议,也就是说mqtt,被阿里规定了 一种格式
首先准备 mqtt客户端点击下载
[还有技小新的工具 个人感觉非常好用]点击下载(https://download.csdn.net/download/weixin_43233189/11560931)
下面说一下 阿里云端搭建
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第1张图片
之后创建设备
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第2张图片
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第3张图片
配置产品
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第4张图片
配置设备
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第5张图片
之后打开mqtt编程工具
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第6张图片
这个软件不只是阿里云能用 其他都可可以用 开启透传就行 非常暴力
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第7张图片
下面说一下8266程序
智能配网

/*********************************智能配网**************************************/
void smartConfig()
{
  Serial.println("SmartConfig begin");
  WiFi.mode(WIFI_STA);
  WiFi.beginSmartConfig();
  while (1)
  {
    delay(200);
 
    Serial.print(".");
    digitalWrite(2, 0);
    delay(200);
    digitalWrite(2, 1);
    delay(200);
    if (WiFi.smartConfigDone())
    {
      EEPROM.begin(512);
      CONFIG buf;
      Serial.println("SmartConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      strcpy(buf.ssid,  WiFi.SSID().c_str());
      strcpy(buf.password, WiFi.psk().c_str());
      EEPROM.put<CONFIG>(0, buf);
      EEPROM.commit();
      delay(1000);
      break;
    }
  }
}

连接wifi,拥有断电不用配置的功能
···

	
void wifiInit()
{
    WiFi.mode(WIFI_STA);
    EEPROM.begin(512);
  CONFIG buf;
  EEPROM.get<CONFIG>(0, buf);
  delay(1000);
  Serial.println(buf.ssid);
  Serial.println(buf.password);
  //EEPROM.commit();
  delay(1000);
  WiFi.begin(buf.ssid, buf.password);
  long lastMsg = millis();
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    long now = millis();
    if (now - lastMsg > 10000) {
      smartConfig();  //微信智能配网
      break;
    }
  }
     client.setServer(MQTT_SERVER, MQTT_PORT);   /* 连接WiFi之后,连接MQTT服务器 */
    client.setCallback(callback);
}

数据处理

void mqttIntervalPost()
{
   

  strcpy(c,inputString.c_str());
     
    //sprintf(param, inputString.c_str());
    sprintf(jsonBuf, ALINK_BODY_FORMAT, c);
    Serial.println(jsonBuf);
    boolean d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
    Serial.print("publish:0失败;1成功");
     
    Serial.println(d);
    if(d==1){
      inputString = "";
     
      }
   
}
void serial() {
  if(stringComplete ==  false){
  while (mySerial.available()) {
    
    char inChar = (char)mySerial.read();
    inputString += inChar;
     
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}
}

shuoyixia
原型:char strcpy(char dest, const char src);
功能:把src所指由’\0’结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回:指向dest的指针。
注意:当src串长度>dest串长度时,程序仍会将整个src串复制到dest区域,可是dest数组已发生溢出。因此会导致dest栈空间溢出以致产生崩溃异常。当达到最大尺寸时,它只是停止复制字符。
函数原型:char
strcat(char
des, char
src),
函数功能:把src所指向的字符添加到dest结尾处(覆盖原dest结尾处的’\0’),并添加新的’\0’。
说明:des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。

而且 存字符的数组最好不要在loop里定义容易死机

C语言中的字符串处理函数(https://blog.csdn.net/MOU_IT/article/details/88975116)

回调函数json处理

void callback(char *topic, byte *payload, unsigned int length)
{
    //Serial.print("Message arrived [");
    //Serial.print(topic);
    //Serial.print("] ");
    payload[length] = '\0';
    //Serial.println((char *)payload);

 message= (char *)payload;
 /************************************json 数据处理********************************************/
 DynamicJsonBuffer jsonBuffer;
 JsonObject & root = jsonBuffer.parseObject(message);
String output =  root[String("params")];
 Serial.println(output);
}

之后就是主函数

void loop()
{
 serial();
    if (millis() - lastMs >= 5000)
    {
        lastMs = millis();
        mqttCheckConnect(); 

        /* 上报消息心跳周期 */
        mqttIntervalPost();
        
        stringComplete = false;
        ESP.wdtFeed();
    }

   client.loop();
    
  }

stm32那边只需要发过来一个字符串就好了
这种格式{“IndoorTemperature”:28,“CurrentHumidity”:50}
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第8张图片
之后电脑端就是有数据了
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第9张图片
之后生产app
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第10张图片
要关联物联网
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第11张图片
然后就是拖拽操作了
ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网_第12张图片
大致流成就是这 ,欢迎

你可能感兴趣的:(物联网,8266,stm32)