下载Arduino
下载链接一:Software | Arduino
下载连接二:Arduino IDE下载(2月21日更新到1.8.19)-Arduino中文社区 - Powered by Discuz!
安装好之后安装esp8266的包
安装ESP8266包
安装方式一:
- 在首选项开发板管理器里面添加
- 然后在开发板管理器界面搜索esp8266,运气好的话可能就搜索到了,反正我是从来没搜到过,下面介绍第二种安装方式
安装方式二:第3章 ESP8266-NodeMCU通过C/C++开发使用物联网 – 太极创客
从上述的网站中下载esp8266的插件,然后点击安装即可
安装MQTT包
搜索pubsubclient,然后安装如下所示的包,版本自己选择
修改源文件(!!!)
这一步挺重要的,之前按照网上的教程装好上述的包之后还是一直连接不上阿里云,总是一直返回错误。后来找到一个教程说要修改源文件,然后就好了。不过我搞忘记在哪看到的了。具体步骤是:
- 找到包安装的位置
- 第一个可能的位置(默认位置):在C盘文档里面有个Arduino,然后点开里面有个libraries,安装的包都在这里面
- 第二个可能的位置:就是可能自己选了一个目录,在首选项里面可以看到,然后包就会放在那个目录的libraries下
- 修改PubSubClient的头文件
- 路径PubSubClient->src
- 打开并修改如下
- 包大小可以尽可能大一点,阿里云官方给的mqtt消息长度小于256k即可
连接测试
- 测试代码
- #include <ESP8266WiFi.h>
- /* 依赖 PubSubClient 2.4.0 */
- #include <PubSubClient.h>
- /* 连接您的WIFI SSID和密码 */
- #define WIFI_SSID "WIFI名称"
- #define WIFI_PASSWD "WIFI密码"
- /* 线上环境域名和端口号 */
- #define MQTT_SERVER "你的域名"
- #define MQTT_PORT 1883//端口号
- #define MQTT_USRNAME "你的username"
- #define CLIENT_ID "你的clientId"
- #define MQTT_PASSWD "你的password"
- //发布消息用的topic
- #define PubTopic "你的topic"
- unsigned long lastMs = 0;
- WiFiClient espClient;
- PubSubClient client(espClient);
- //收到消息后的回调函数
- 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);
- }
- //wifi初始化
- void wifiInit()
- {
- WiFi.mode(WIFI_STA);
- WiFi.begin(WIFI_SSID, WIFI_PASSWD);
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(1000);
- Serial.println("WiFi not Connect");
- }
- Serial.println("Connected to AP");
- Serial.println("IP address: ");
- Serial.println(WiFi.localIP());
- Serial.print("espClient [");
- client.setServer(MQTT_SERVER, MQTT_PORT); /* 连接WiFi之后,连接MQTT服务器 */
- client.setCallback(callback);
- }
- //发布一个字符串的消息
- void pubMsg(char *msg)
- {
- boolean d = client.publish(PubTopic, msg);
- if(d){
- Serial.println("publish success");
- }else{
- Serial.println("publish fail");
- }
- }
- //发布指定长度的字符消息
- void pubMsgLen(uint8_t *msg,int len)
- {
- boolean d = client.publish(PubTopic,msg,len);
- if(d){
- Serial.println("publish success");
- }else{
- Serial.println("publish fail");
- }
- }
- //连接到服务器
- void mqttCheckConnect()
- {
- while (!client.connected())
- {
- Serial.println("Connecting to MQTT Server ...");
- if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))
- {
- Serial.println("MQTT Connected!");
- }
- else
- {
- Serial.print("MQTT Connect err:");
- Serial.println(client.state());
- delay(5000);
- }
- }
- }
- void setup()
- {
- /* initialize serial for debugging */
- Serial.begin(115200); //开启串口
- Serial.println("Demo Start");
- wifiInit();//连接wifi
- unsigned char i=0;
- mqttCheckConnect();//连接阿里云
- pubMsg("hello aliyun!");
- }
-
- // the loop function runs over and over again forever
- void loop()
- {
- client.loop();//保持客户端的连接
- }
复制代码
- 代码烧录好之后,在云平台就可以查看发送来的消息
- 我们再从云平台发送一条消息过去测试
- 在串口调试界面可以看到
注意
收到消息的速度与
client.loop();//保持客户端的连接
这句有很大关系 放入延时中可能会让接收消息也延迟
来源:https://blog.csdn.net/xyx0610/article/details/123934145
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |