概述
一、概述
之前通过串口调试助手+ESP8266已经连接上阿里云了
ESP8266连接阿里云(串口调试助手)
这次我们使用STM32+ESP8266来接入阿里云,其实本质上就是STM32和ESP8266进行串口通信,相当于使用STM32代替之前使用的串口调试助手来发送AT指令。只是发送的字符串数据可能有些细节需要注意一下。
二、保存连接的AT指令
定义几个字符串数据保存需要发送的AT指令
//注意:
//末尾记得加rn
//字符串里面的 " 需要转义所以前面需要加 才能得到正确的"
//字符串里面的 ,(逗号) 需要使用转义,而一个在字符串中需要使用\
u8 HotSpot_Connect[]="AT+CWJAP="WIFI名称","WiFi密码"rn";//连接热点AT指令
//接入阿里云的AT指令
u8 MQTTUSERCFG[]="AT+MQTTUSERCFG=0,1,"NULL","用户名","密码",0,0,""rn";//每一个"前面加''
u8 MQTTCLIENTID[]="AT+MQTTCLIENTID=0,"ClienId|"rn";//每一个逗号前加一个'',在双引号里面就要用'\'
u8 MQTTCONN[]="AT+MQTTCONN=0,"ProductKey.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1rn";
其中在使用时需要替换的有 WIFI名称,WIFI密码,用户名,密码,ClientId,ProductKey
这些参数全部改成你自己的参数
三、配置串口
这部分应该比较简单,随便去哪复制粘贴改改就好了
我使用的是STM32F103C8T6的串口2,下面是配置代码
void Uart2_init(u32 bound){
//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能USART2,GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
//USART2_TX
GPIOA.2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA2
//USART2_RX
GPIOA.3初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA3
//Usart2 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1 ;//抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
//子优先级0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
//USART 初始化设置
USART_InitStructure.USART_BaudRate = bound;//串口波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
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_Rx | USART_Mode_Tx; //收发模式
USART_Init(USART2, &USART_InitStructure); //初始化串口2
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接收中断
USART_Cmd(USART2, ENABLE);
//使能串口2
}
四、使用串口发送AT指令
串口配置好了,需要发送的AT指令也保存好了,接下来把AT指令逐个字符循环发送出去就好了,下面是发送代码(WIFI连接配置一次就好了,ESP8266会自动连接的)
void Net_Things_Init(void)
{
int j=0;
//连接wifi wifi变动时可以使用
// for(j=0;HotSpot_Connect[j]!='