使用ESP8266连接阿里云并实现数据的收发(完整版)(不涉及单片机仅为连接单片机前的调试工作)

一、ESP8266烧录固件

        由于要连接阿里云平台要使用到相关MQTT AT指令,而我们所购买的ESP8266模块都带了乐鑫官方的AT固件,发送与MQTT相关的AT指令均会返回ERROR。因此需要给ESP8266升级固件。

烧录固件参考:ESP8266如何使用MQTT协议连接阿里云平台-CSDN博客,需注意必须使用数据线,当数据线将esp8266与电脑usb连接后需能检测到COM口。(小编开始用的三合一数据线无法检测到COM口)

二、阿里云物联网平台产品及设备的创建

        在浏览搜索阿里云并登录,在首页面选择产品-物联网-物联网平台即可进入物联网平台。

进入物联网平台后选择管理控制台

激活并进入公共实例

进入公共实例后选择设备管理-产品-创建产品

产品名称任意,所属品类为自定义品类,节点类型、连网方式、数据格式保持默认。然后确认

然后点击产品,找到对应的产品名称然后查看

点击功能定义-前往编辑草稿

第一步选择添加自定义功能,第二部按照自己的需求填写自定义功能的参数并确认,第三步发布上线(在弹窗中打勾并确认)

 然后点击设备-添加设备,选取自己创建的产品名称,DeviceName按自己需求填写,然后确认并完成。

三、连接阿里云平台

        通过ESP8266连接阿里云平台需要发送以下的AT指令,wi-fi名密码根据自己所连WiFi确认

AT+RST                       //重启模块
AT+CWMODE=1                  // 设置为Station 模式
AT+CWJAP="Wi-fi名","密码"    //连接Wi-fi
AT+MQTTUSERCFG=0,1,"NULL","username","passwd",0,0,"" 
                            //配置MQTT用户属性
AT+MQTTCLIENTID=0,"clientId"                     
                            //设置 MQTT 客户端 ID,"clientId"参数需在每一个逗号前加/
AT+MQTTCONN=0,"mqttHostUrl",1883,1
                            //连接 MQTT Broker

其中的username、passwd、clientId及mqttHosturl参数在设备-设备信息-MQTT连接参数中找到

使用串口助手发送响应的AT指令

发送完上述AT指令后设备成功在线

四、阿里云实现数据的收发

        4.1 阿里云实现数据的接收

通过MQTT协议收发数据需要配置相应的topic,可以在产品-Topic类列表-物模型通信Topic中进行查看。选择设备属性设置(订阅Topic)与设备属性上报(发布Topic)。需注意其中的${deviceName}需改为设备名称。

对应的MQTT上传数据的订阅与发布命令为:

AT+MQTTSUB=0,"订阅Topic类",1              //订阅 MQTT Topic
AT+MQTTPUB=0,"发布Topic类","数据",1,0     //发布 MQTT 消息(字符串)

在设备-物模型数据可以看到上传的数据

        4.2 阿里云实现数据的发送

                4.2.1自定义Topic发送数据

        在产品-Topic类列表-自定义Topic中找到订阅Topic

        发送相应的订阅Topic的AT指令

        在设备-Topic列表下,选择发布消息

        填写消息内容,点击确认。串口助手会接收到数据。

                4.2.2在线调试发送数据

          在监控运维-在线调试中选取相应的设备,然后输入参数点击设置,即可发送数据。

AT指令参链接:MQTT AT Commands — ESP-AT 用户指南 文档 (readthedocs-hosted.com)

  • 40
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我会尽量详细地回答你的问题。 首先,需要准备以下硬件设备: - AVR单片机(如ATmega328P) - ESP8266单片机 - 一颗LED灯 - 杜邦线若干 - 电源和USB转串口模块(用于烧录程序) 接下来,我们将通过以下步骤来实现你的要求: 1. 确认硬件连接 将AVR单片机ESP8266单片机通过杜邦线连接起来,具体连接方式如下: AVR单片机ESP8266单片机连接 | AVR单片机 | ESP8266单片机 | | --------- | -------------- | | RX | TX | | TX | RX | | GND | GND | | VCC | VCC | 将LED的长脚连接到AVR单片机的PB0引脚,短脚连接到GND。 2. 烧录AVR单片机程序 使用AVR单片机开发环境(如AVR Studio)编写以下程序,并通过USB转串口模块将程序烧录到AVR单片机中: ```c #include <avr/io.h> #include <util/delay.h> #define F_CPU 16000000UL // CPU频率为16MHz #define BAUD 9600 // 波特率为9600 void USART_Init(void) { UBRR0H = (unsigned char)(F_CPU/(16UL*BAUD)-1)>>8; // 设置波特率 UBRR0L = (unsigned char)(F_CPU/(16UL*BAUD)-1); UCSR0B = (1<<TXEN0)|(1<<RXEN0); // 使能UART收发 UCSR0C = (1<<UCSZ00)|(1<<UCSZ01); // 数据位为8位,无校验位,1位停止位 } void USART_Transmit(unsigned char data) { while (!(UCSR0A & (1<<UDRE0))); // 等待缓冲区为空 UDR0 = data; // 发送数据 } int main(void) { DDRB |= (1<<DDB0); // 设置PB0为输出模式 USART_Init(); // 初始化UART while (1) { USART_Transmit('A'); // 向ESP8266发送数据 _delay_ms(500); // 等待500ms } return 0; } ``` 这个程序初始化了AVR单片机的UART模块,并设置波特率为9600。然后程序进入一个死循环,不断向ESP8266发送字母'A',并等待500ms。 3. 烧录ESP8266单片机程序 使用ESP8266单片机开发环境(如Arduino IDE)编写以下程序,并通过USB转串口模块将程序烧录到ESP8266单片机中: ```c #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // 设置软串口接收和发送引脚 void setup() { mySerial.begin(9600); // 设置波特率为9600 pinMode(LED_BUILTIN, OUTPUT); // 设置LED_BUILTIN为输出模式 } void loop() { if (mySerial.available()) { char c = mySerial.read(); // 读取从AVR单片机发送过来的数据 if (c == 'A') { digitalWrite(LED_BUILTIN, HIGH); // 点亮LED delay(500); // 等待500ms digitalWrite(LED_BUILTIN, LOW); // 熄灭LED delay(500); // 等待500ms } } } ``` 这个程序初始化了ESP8266单片机的软串口,并设置波特率为9600。然后程序进入一个死循环,不断读取从AVR单片机发送过来的数据,如果读取到字母'A',则点亮LED,等待500ms后熄灭LED,再等待500ms。 4. 测试 将AVR单片机ESP8266单片机分别连接到电源,打开串口调试工具,设置波特率为9600,打开连接。当AVR单片机发送字母'A'时,ESP8266单片机应该会接收到数据,并控制LED点亮和熄灭。如果一切正常,恭喜你,你已经成功实现了你的要求!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值