75MQTT控制WiFi模块.docx

上传人:b****1 文档编号:14573214 上传时间:2023-06-24 格式:DOCX 页数:15 大小:1.71MB
下载 相关 举报
75MQTT控制WiFi模块.docx_第1页
第1页 / 共15页
75MQTT控制WiFi模块.docx_第2页
第2页 / 共15页
75MQTT控制WiFi模块.docx_第3页
第3页 / 共15页
75MQTT控制WiFi模块.docx_第4页
第4页 / 共15页
75MQTT控制WiFi模块.docx_第5页
第5页 / 共15页
75MQTT控制WiFi模块.docx_第6页
第6页 / 共15页
75MQTT控制WiFi模块.docx_第7页
第7页 / 共15页
75MQTT控制WiFi模块.docx_第8页
第8页 / 共15页
75MQTT控制WiFi模块.docx_第9页
第9页 / 共15页
75MQTT控制WiFi模块.docx_第10页
第10页 / 共15页
75MQTT控制WiFi模块.docx_第11页
第11页 / 共15页
75MQTT控制WiFi模块.docx_第12页
第12页 / 共15页
75MQTT控制WiFi模块.docx_第13页
第13页 / 共15页
75MQTT控制WiFi模块.docx_第14页
第14页 / 共15页
75MQTT控制WiFi模块.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

75MQTT控制WiFi模块.docx

《75MQTT控制WiFi模块.docx》由会员分享,可在线阅读,更多相关《75MQTT控制WiFi模块.docx(15页珍藏版)》请在冰点文库上搜索。

75MQTT控制WiFi模块.docx

75MQTT控制WiFi模块

章节目录

第一章XXAI智能识别技术

第二章人脸识别技术

第三章Arduino基础学习

第四章Arduino进阶学习

第五章IOT物联网

第六章WIFI与Arduino的结合

第七章阿里云IOT服务

第八章XX天工物联网

第九章APPInventor制作手机APP

第十章自己做的七七八八

第十一章制作APPInventor自定义插件

第十二章手机实现局域网连接

第十三章项目应用——小学生XX天工

第十四章项目应用——ESP32-cam摄像头模块

第十五章项目应用——ESP32-cam摄像头模块二

第十六章项目应用——WIFI模块手动配网

第十七章项目应用——红纳里斯的跨阵M1

第十八章项目应用——OLED液晶屏插件

7-5-MQTT控制WiFi模块

我们今天准备用MQTT-fx客户端程序发送一个开关灯的指令,来点亮或熄灭WiFi模块上面的LED灯。

  一. 创建产品、设备

创建一个自定义的产品LED_Server。

 

点击LED_Server的“详情”,自定义一个TOPIC话题,

名字为“led_topic”,权限为“发布和订阅”

点击LED_Server右上角的发布按钮。

在设备中,选择批量添加设备,添加两个设备。

下面的一个用于MQTT-fx客户端连接,上面的一个用于WiFi模块连接。

  二. WiFi模块客户端的程序

  这次我们设置了一个开关灯的指令,由MQTT客户端发送指令,有WiFi模块接收指令,并根据指令内容点亮或熄灭模块上面的一个LED灯。

我们约定的指令一共有两条:

开灯是  {dn:

"led",s:

1}

关灯是  {dn:

"led",s:

0}

  我们让WiFi模块接到来自服务器的消息时,先解读出消息中包含的这两个信息。

如果发现是“led”,则根据后面的s的值来执行开灯或关灯的操作。

程序的源代码:

ArduinoIDE直接烧写

//连接阿里云

//接收{dn:

"led",s:

1}{dn:

"led",s:

0}开关灯

#include

#include

#include

 

#include"aliyun_mqtt.h"

 

//GPIO13,D7ontheNodeMCUv3

#defineSENSOR_PIN13

 

#defineWIFI_SSID    "ChinaNet-xxVP" //替换自己的WIFI

#defineWIFI_PASSWD   "123456789" //替换自己的WIFI

 

#definePRODUCT_KEY   "a1MVINA9nSN"//替换自己的PRODUCT_KEY

#defineDEVICE_NAME   "OxPnar61jUWm0Q3hMHZ0"//替换自己的DEVICE_NAME

#defineDEVICE_SECRET  "gMW7fExaxndDjE0JkaCC4QuT5OU58tpo"//替换自己的DEVICE_SECRET

#defineCLIENT_NAME   "led"

 

#defineDEV_VERSION    "S-TH-WIFI-v1.0-20190220"    //固件版本信息

#defineALINK_led_topic    "/"PRODUCT_KEY"/"DEVICE_NAME"/user/led_topic" //自定义话题

#defineALINK_BODY_FORMAT     "{\"id\":

\"123\",\"version\":

\"1.0\",\"method\":

\"%s\",\"params\":

%s}"

#defineALINK_TOPIC_PROP_POST   "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/thing/event/property/post"

#defineALINK_TOPIC_PROP_POSTRSP "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/thing/event/property/post_reply"

#defineALINK_TOPIC_PROP_SET   "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/thing/service/property/set"

#defineALINK_METHOD_PROP_POST  "thing.event.property.post"

#defineALINK_TOPIC_DEV_INFO   "/ota/device/inform/"PRODUCT_KEY"/"DEVICE_NAME""   

#defineALINK_VERSION_FROMA   "{\"id\":

123,\"params\":

{\"version\":

\"%s\"}}"

unsignedlonglastMs=0;

 

WiFiClient  espClient;

PubSubClientmqttClient(espClient);

unsignedintWAIT_MS=2000;

 

voidinit_wifi(constchar*ssid,constchar*password)

{

  WiFi.mode(WIFI_STA);

  WiFi.begin(ssid,password);

  while(WiFi.status()!

=WL_CONNECTED)

  {

    Serial.println("WiFidoesnotconnect,tryagain...");

    delay(500);

  }

 

  Serial.println("Wifiisconnected.");

  Serial.println("IPaddress:

");

  Serial.println(WiFi.localIP());

}

 

voidmqtt_callback(char*topic,byte*payload,unsignedintlength)

{

  Serial.print("Messagearrived[");

  Serial.print(topic);

  Serial.print("]");

  payload[length]='\0';

  Serial.println((char*)payload);

 

   parseMqttResponse((char*)payload);

}

//解析mqtt数据

voidparseMqttResponse(char*payload){

  Serial.println("startparseOneNetMqttResponse");

  StaticJsonBuffer<100>jsonBuffer;

  JsonObject&root=jsonBuffer.parseObject(payload);

  if(!

root.success()){

    Serial.println("parseObject()failed");

    return;

  }

  StringdeviceName=root["dn"];

  intstatus=root["s"];

   if(strcmp(CLIENT_NAME,deviceName.c_str())==0){

    if(status==1)

       digitalWrite(LED_BUILTIN,LOW);

    else

       digitalWrite(LED_BUILTIN,HIGH);

  }

}

voidmqtt_version_post()

{

  charparam[512];

  charjsonBuf[1024];

 

  //sprintf(param,"{\"MotionAlarmState\":

%d}",digitalRead(13));

  sprintf(param,"{\"id\":

123,\"params\":

{\"version\":

\"%s\"}}",DEV_VERSION);

  //sprintf(jsonBuf,ALINK_BODY_FORMAT,ALINK_METHOD_PROP_POST,param);

  Serial.println(param);

  mqttClient.publish(ALINK_TOPIC_DEV_INFO,param);

}

voidmqtt_check_connect()

{

  while(!

mqttClient.connected())//mqtt

  {

    while(connect_aliyun_mqtt(mqttClient,PRODUCT_KEY,DEVICE_NAME,DEVICE_SECRET))

    {

      Serial.println("MQTTconnectsucceed!

");

      delay(2000);

      //订阅自定义话题

       mqttClient.subscribe(ALINK_led_topic);       

      Serial.println("subscribedone");

      mqtt_version_post();

    }

  }

   

}

 

voidmqtt_interval_post()

{

  charparam[512];

  charjsonBuf[1024];

 

  //sprintf(param,"{\"MotionAlarmState\":

%d}",digitalRead(13));

  sprintf(param,"{\"CurrentHumidity\":

%d,\"CurrentTemperature\":

12,\"GeoLocation\":

{\"CoordinateSystem\":

2,\"Latitude\":

2,\"Longitude\":

123,\"Altitude\":

1}}",digitalRead(13));

  sprintf(jsonBuf,ALINK_BODY_FORMAT,ALINK_METHOD_PROP_POST,param);

  Serial.println(jsonBuf);

  mqttClient.publish(ALINK_TOPIC_PROP_POST,jsonBuf);

}

 

 

voidsetup()

{

  delay(1000);

  pinMode(LED_BUILTIN,OUTPUT);

  Serial.begin(115200);

  Serial.println("DemoStart"); 

  init_wifi(WIFI_SSID,WIFI_PASSWD);

  mqttClient.setCallback(mqtt_callback);

}

 

//theloopfunctionrunsoverandoveragainforever

voidloop()

{

  if(millis()-lastMs>=8000)

  {

    lastMs=millis();

    mqtt_check_connect();

  }

  mqttClient.loop();

}

测试程序

我们用ArduinoIDE烧写开发板,然后打开串口监视器。

我们用浏览器登录阿里云服务器,然后选择上面的那个用于WiFi模块连接的设备,点击后面的“详情”,然后在自定义TOPIC中,点击“led_topic”后面的发布消息,然后发送一个{dn:

"led”,s:

1}的消息,可以看到WiFi模块上面的灯亮了,串口监视器也显示收到了消息。

  到这里,我们可以看出WiFi模块的程序是成功的,能自动从阿里云服务器接收话题的消息,并根据指令开灯或关灯。

  三. MQTT-fx客户端连接

  我们在电脑中设置MQTT-fx的连接,把他连接到前面新建设备中下面的那个连接。

如果设置没有错的话,我们在客户端中点击连接按钮,后面的灯会变绿,说明已经连接到了服务器了。

在浏览器中,我们也能在设备列表中看到设备通过了验证,并以在线。

  这时候,我们在电脑的MQTT客户端订阅“led_topic”话题,并往这个话题发送一个{dn:

"led”,s:

1}的消息。

奇怪的是,开发板上的灯并没有被点亮。

  我们用浏览器,在设备列表下面的用于MQTT连接的设备后面查看详情,然后在“日志服务”中,能看到MQTT发过来的消息,已经成功地发到了服务器了。

  可为什么WiFi开发板的灯不亮呢?

原来,在阿里云的服务中,每一个设备的话题只能自己发、自己收。

不同的设备之间的消息,需要经过“云流转”才能互相传递。

  四. 设置云产品流转

点击左边的“云产品流转”,创建规则"led_client"。

在编写SQL中,字段中输入“dn,s”这两个字段名,在Topic中选择客户端连接的设备,“user/led_topic”这个话题。

这句话表示需要流转的消息是来自哪里的消息。

在添加操作中,“发送到一个Topic”,选择WiFi模块连接的设备,“user/led_topic”。

这句话的意思是,把流转的消息发给谁。

总的一句话,流转规则就是要规定好,需要流转的消息来自哪里,去向何方。

设置好后,别忘了点击“启动”。

  五. 再次测试程序

  这时候,我们打开MQTT-fx客户端,往led_topic话题再发送一个{dn:

"led”,s:

1}的消息时,开发板上面的LED灯亮了,串口监视器也收到了消息。

我们打开WiFi模块连接的设备,在日志服务中,也可以看到有下行的消息了。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2