【DFRobot 云雀气象仪】学习笔记05(使用ESP8266上传云雀气象仪数据到阿里云)
## 10:使用ESP8266上传云雀气象仪数据阿里云我们使用mqtt模拟器上传数据之后,用来调试同个通讯过程的正确性,之后,我们采用wifi技术上传到云雀气象仪数据到阿里云,这里我们使用ESP8266来实现。
### 10.1:硬件环境
ESP8266 尺寸为5x5 mm,ESP8266 模组需要的外围器件有:10个电阻电容电感、1个无源晶振、1个flash。工作温度范围:-40~125℃。ESP8266 是一个完整且自成体系的 WiFi 网络解决方案,能够独立运行, 也可以作为 slave 搭载于其他 Host 运行。
ESP8266 在搭载应用并作为设备中唯一的应用处理器时,能够直接从外接闪存中启动。内置的高速缓冲存储器有利于提高系统性能,并减少内存需求。
另外一种情况是,无线上网接入承担 WiFi 适配器的任务时,可以将其添加到任何基于微控制器的设计中,连接简单易行,只需通过 SPI/SDIO 接口或中央处理器 AHB 桥接口即可。ESP8266 强大的片上处理和存储能力,使其可通过 GPIO 口集成传感器及其他应用的特定设备,实现了最低前期的开发和运行中最少地占用系统资源。硬件如下图所示:
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231209115625016.png)
ESP8266硬件接口如下:
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231209120605212.png)
### 10.2:软件编程
首先ESP8266采用串口通讯,我们使用的单片机事STM32F103,使用串口2进行通讯。使用PA2和PA3引脚。
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231209120250961.png)
首先进行串口通讯设置,初始化串口2,波特率为115200;具体代码如下:
```C
voidUART2_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
/* 第1步:打开GPIO和USART部件的时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
/* 第2步:将USART Tx的GPIO配置为推挽复用模式 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* 第3步:将USART Rx的GPIO配置为浮空输入模式
由于CPU复位后,GPIO缺省都是浮空输入模式,因此下面这个步骤不是必须的
但是,我还是建议加上便于阅读,并且防止其它地方修改了这个口线的设置参数
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*第3步已经做了,因此这步可以不做
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
*/
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* 第4步: 配置串口硬件参数 */
USART_InitStructure.USART_BaudRate = 115200; /* 波特率 */
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; /* 仅选择接收模式 */
USART_Init(USART2, &USART_InitStructure);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); /* 使能接收中断 */
USART_Cmd(USART2, ENABLE); /* 使能串口 */
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
```
设置串口中断接收数据,实现方式如下:
```C
void USART2_IRQHandler(void)
{
unsigned char dat;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
dat = USART_ReceiveData(USART2);
CBUF_Push(RxBuffer2, dat);
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
}
```
编写AT指令应答函数:
```
//从串口3响应接收,如果接收到了则会返回接收到的数据。
u8 AT_Respose(u8 *string)
{
printf("\r\n接收到模块响应数据为:\n%s",USART3_RX_BUF);
if(strstr((const char*)USART2_RX_BUF,(const char*)string) != 0)
{
printf("\r\n接收到期待的响应 %s",string);
USART2_RX_STA = 0;
memset(USART3_RX_BUF,0x00,USART2_MAX_RECV_LEN);
return 1;
}
else
{
printf("\r\n未接收到期待的响应 %s",string);
USART2_RX_STA = 0;
memset(USART3_RX_BUF,0x00,USART2_MAX_RECV_LEN);
return 0;
}
}
```
串口中断主要用于AT应答回复,判断应答命令来判断AT指令是否成功,配制AT指令入网,主要步骤如下:
```python
第一步:
发送AT,返回OK,说明AT指令通讯正常
第二步:
发送:AT+CWMODE=1 设为station模式
第三步:
发送:AT+CWLAP 显示无线列表
第四步:
发送:AT+CWJAP=“无线网络名”,“无线网络密码” 加入无线网络
第五步:
发送:AT+CIPMUX=1 开启多连接模式
现在已经建立好连接了 就可以和服务器进行通讯了
```
接下来就是用MQTT连接阿里云,将云雀气象仪的数据上传。首先登陆阿里云,查看设备数据信息:
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231209160716917.png)
同时查看自己的物理型topic
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231209160907010.png)
连接阿里云主要有以下几个命令步骤:
```C
1:设置 MQTT 登陆用户名:AT+MQTTLONGUSERNAME
2:设置 MQTT 登陆密码:AT+MQTTLONGPASSWARD
3:设置 MQTT 连接属性:AT+MQTTCONNCFG
4:连接阿里云的MQTT Broker(TCP服务器):AT+MQTTCONN
5:订阅主体:AT+MQTTSUB=<LinkID>,<"topic">,<qos>
6:上传数据:AT+MQTTPUB=<LinkID>,<"topic">,<"data">,<qos>,<retain>
```
MQTT的还有一些指令,可参考乐鑫官网,下载文件查看。
### 10.3:实验结果
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231209185223754.png)
LCD显示数据和阿里云平台一致。
页:
[1]