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 要关联物联网 然后就是拖拽操作了 大致流成就是这 ,欢迎
