之前对接了百度云,继百度云,载入阿里云alink写协议,也就是说mqtt,被阿里规定了 一种格式
首先准备 mqtt客户端点击下载
[还有技小新的工具 个人感觉非常好用]点击下载(https://download.csdn.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\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}
之后电脑端就是有数据了
之后生产app
要关联物联网
然后就是拖拽操作了
大致流成就是这 ,欢迎