ARDUINO8266 + MQTT +STM32 阿里云设备上报下发 智能配网
之前对接了百度云,继百度云,载入阿里云alink写协议,也就是说mqtt,被阿里规定了 一种格式 首先准备 点击下载 [还有技小新的工具 个人感觉非常好用]点击下载(https://download..net/download/weixin_43233189/11560931) 下面说一下 阿里云端搭建 之后创建设备 配置产品 配置设备 之后打开mqtt编程工具 这个软件不只是阿里云能用 其他都可可以用 开启透传就行 非常暴力 下面说一下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 ", WiFi.SSID().c_str()); Serial.printf("PSW:%s ", 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 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 == ) { stringComplete = true; } } } }
shuoyixia 原型:char strcpy(char dest, const char src); 功能:把src所指由’ ’结束的字符串复制到dest所指的数组中。 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回:指向dest的指针。 注意:当src串长度>dest串长度时,程序仍会将整个src串复制到dest区域,可是dest数组已发生溢出。因此会导致dest栈空间溢出以致产生崩溃异常。当达到最大尺寸时,它只是停止复制字符。 函数原型:char strcat(char des, char src), 函数功能:把src所指向的字符添加到dest结尾处(覆盖原dest结尾处的’ ’),并添加新的’ ’。 说明:des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。
而且 存字符的数组最好不要在loop里定义容易死机
(https://blog..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] = ; //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} 之后电脑端就是有数据了 之后生产app 要关联物联网 然后就是拖拽操作了 大致流成就是这 ,欢迎