本实验报告主要研究了物信息通过MQTT协议上传至云平台的过程及其效果。实验首先介绍了MQTT协议的基本原理和特点,包括其轻量级、发布/订阅模式以及适用于低带宽、高延迟或不稳定的网络环境的优势。随后,报告详细描述了实验的设计和实施过程,包括硬件设备的选择、软件环境的搭建、MQTT客户端与云平台的连接配置等。
在实验过程中,我们成功地将物信息通过MQTT协议发送到云平台,并实现了数据的实时上传和监控。实验结果显示,MQTT协议在数据传输效率、稳定性和可靠性方面均表现出色,能够满足物联网应用中对于实时性和可靠性的要求。此外,我们还分析了实验中遇到的一些问题和挑战,如网络延迟、数据丢包等,并提出了相应的解决方案和改进措施。
本实验的成功实施为物信息通过MQTT协议上传云平台提供了有益的参考和借鉴。通过本实验,我们进一步验证了MQTT协议在物联网领域中的适用性和优势,为未来的物联网应用开发和部署提供了重要的技术支持和实践经验。
总体而言,本实验报告通过详细记录实验过程和结果,为相关研究人员和开发人员提供了有关物信息通过MQTT协议上传云平台的宝贵信息和实践指导。我们相信,随着物联网技术的不断发展和普及,MQTT协议将在更多领域得到广泛应用和推广。
关键词 MQTT协议;物联网;云平台;
实验任务:
- 编程实现单片机通过AT指令连接WIFI模块。
- 编程实现单片机建立与云平台的连接,编程实现单片机与云平台交互。
- 完成硬件与云平台完整的正向与反向双向的通信过程。
实验目的:
理解物联网云平台的架构和作用;掌握接入云平台的方法和流程以及关键元素。
WiFi的AP模式(Access Point模式)和STA模式(Station模式)是无线网络中的两种基本工作模式,它们定义了设备在网络中的角色和行为。
1. AP模式(Access Point模式):
在AP模式下,设备充当无线网络的中心节点,也就是无线路由器或热点。
设备负责管理无线网络,包括广播SSID(Service Set Identifier,服务集标识符),管理连接的客户端设备,以及提供数据传输的中继点。
客户端设备(如智能手机、笔记本电脑等)可以连接到AP模式的设备上,通过它访问互联网或其他网络资源。
AP模式的设备通常具备更强的处理能力和更稳定的网络连接,以支持多个客户端设备同时连接和数据传输。
2.STA模式(Station模式):
STA模式是指设备作为无线网络中的一个客户端节点,也就是普通的无线终端设备。
在STA模式下,设备连接到一个已经存在的无线网络(通常是通过AP模式的设备建立的),以便访问网络资源或互联网。
STA模式的设备不需要广播SSID,它们只需要搜索并连接到可用的无线网络,并根据网络配置进行数据传输。
STA模式的设备通常更注重移动性和便携性,它们可能不具备AP模式设备那样的高级网络管理功能。
WiFi模块在下载固件和工作时,其配置方法因模式的不同而有所差异。以下将针对这两种模式分别进行说明。
无论是STA模式还是AP模式,下载固件的步骤通常是一致的。
需要从官方网站或可靠的资源下载与WiFi模块型号相匹配的固件文件。确保选择与模块硬件版本和特性相兼容的固件。准备好用于刷写固件的工具,如固件刷写软件(如ESP8266Flasher)和USB转串口适配器(如果模块支持串口通信)。将WiFi模块通过适当的接口(如USB或SPI)连接到电脑。安装必要的驱动程序,以便电脑能够识别并与WiFi模块通信。然后,打开固件刷写软件。在固件刷写软件中,选择正确的串口或接口,并选择之前下载的固件文件。根据模块的文档,可能还需要设置一些刷写参数,如波特率、数据位等。确保模块处于刷写模式(可能需要按特定的按键组合或设置特定的引脚状态)。然后,在软件中点击开始刷写或类似的按钮,等待固件刷写完成。刷写完成后,断开连接并重新启动模块。通过检查模块的功能或查看固件版本信息,验证固件是否已成功安装。
WiFi模块的工作模式配置方法会根据是STA模式还是AP模式而有所不同。
STA模式配置方法
在STA模式下,WiFi模块需要连接到现有的无线网络。需要提供无线网络的SSID(网络名称)和密码(如果需要)。这通常通过串口通信或Web界面进行配置。一旦连接到无线网络,你可能还需要为WiFi模块设置静态IP地址,以便在网络中稳定地识别和访问它。配置完成后,测试WiFi模块是否能够成功连接到无线网络,并与其他设备或服务器进行通信。
AP模式配置方法
在AP模式下,你需要配置WiFi模块的SSID、密码、信道等参数,以创建一个无线网络访问点。这些参数同样可以通过串口通信或Web界面进行配置。配置完成后,启动WiFi模块的AP功能,使其开始广播无线信号。使用其他设备尝试连接到WiFi模块创建的无线网络,并测试连接的稳定性和通信功能。
AT 指令在设备利用串口进行通讯时有着广泛的作用, 终端设备能够通过 AT 指令控制适配器进行信息交互,例如呼叫、按键控制、传真、GPRS 等。然而在进行项目开发时, 有时需要频繁地使用 AT 指令,而 AT 命令的数据帧格式不固 定,AT指令需要逐条写入和解析,开发和维护比较麻烦。为 了简化系统开发,方便后期维护。
AT
AT+GMR
AT+CWMODE=1
AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
AT+CWJAP="<ssid>","<password>"
#连接wifi/热点
案例:AT+CWJAP="3246904448ab","12345678"
AT+MQTTUSERCFG=0,1,"<Client ID>","<账号>","<密码>",0,0,""
#设置MQTT连接所需要的的参数,包括用户ID(不为空)、账号(admin)以及密码(public)
案例:AT+MQTTUSERCFG=0,1,"NULL","DHT11&hlicjfOx0OZ","B3A224ADA62B4798F5D88B87969A47032C402089",0,0,""
AT+MQTTCLIENTID=0,"<Client ID>"
#设置MQTT连接所需要的Client ID参数
案例:AT+MQTTCLIENTID=0,"DHT11|securemode=3\,signmethod=hmacsha1\,timestamp=123|"
AT+MQTTCONN=0,"<服务器地址>",<端口号>,<是否重连标志>
#连接mqtt服务器,设置服务器地址,端口号和是否重连标志(0或1)
案例:AT+MQTTCONN=0,"hlicjfOx0OZ.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1
AT+MQTTPUB=0,"<topic名>","<topic内容>",<QOS>,<retain> #发布一条topic
案例:AT+MQTTPUB=0,"/sys/hlicjfOx0OZ/DHT11/thing/event/property/post","{\"method\":\"thing.service.property.post\"\,\"id\":\"99119635\"\,\"params\":{\"CurrentHumidity\":99\,\"CurrentTemperature\":38}\,\"version\":\"1.0.0\"}",0,0
MAIN.C
#include "string.h"
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "dht11.h"
int main()
{
// u8 temperature; //温度获取变量
// u8 humidity; //湿度获取变量
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
LED_Init();
USART1_Init(115200);//串口波特率115200
GPIO_SetBits(LED_PORT,LED_PIN); //LED=0 亮
delay_ms(1000); //延迟
DHT11_Init();
printf("AT+RST\r\n"); //第一步 复位 只用一次
delay_ms(2000); //延迟
printf("AT+CWMODE=1\r\n"); //第二步 模式 只用一次
delay_ms(2000); //延迟
printf("AT\r\n"); //第一步 AT
delay_ms(2000); //延迟
printf("AT+GMR\r\n"); //第一步 版本号
delay_ms(2000); //延迟
printf("AT+CWJAP=\"XX\",\"XXXXXX\"\r\n"); //第四步 wifi热点
delay_ms(2000); //延迟
GPIO_SetBits(LED_PORT,LED_PIN); //LED=1 灭
printf("AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"\r\n"); //第三步
delay_ms(3000); //延迟
printf("AT+MQTTUSERCFG=0,1,\"NULL\",\"XXXXX\",\"XXXXXX\",0,0,\"\"\r\n"); //第五步
delay_ms(3000); //延迟
printf("AT+MQTTCLIENTID=0,\"XXXX|\"\r\n"); //第六步
delay_ms(3000); //延迟
printf("AT+MQTTCONN=0,\"XXXXXXX\",1883,1\r\n"); //第七步
delay_ms(3000); //延迟
GPIO_ResetBits(LED_PORT,LED_PIN); //LED=0 亮
//连接阿里云,让设备在线
//---------------------------------------------------------
//订阅发布指令
printf("AT+MQTTSUB=0,\"/XXXXXXX\",1\r\n"); //订阅指令
delay_ms(5000); //延迟
GPIO_SetBits(LED_PORT,LED_PIN); //LED=1 灭
printf("AT+MQTTPUB=0,\"/XXXXXXX\",\"{\\\"LED\\\":1}\",1,0\r\n"); //发数据{"LED":1}
delay_ms(5000); //延迟
printf("AT+MQTTPUB=0,\"/XXXXXXX\",\"{\\\"LED\\\":0}\",0,0\r\n"); //发数据{"LED":0}
delay_ms(5000); //延迟
GPIO_ResetBits(LED_PORT,LED_PIN);
实验结果