基于STM32单片机ESP8266物联网阿里云的远程控制LED系统
物联网技术可以用于智能家居,通过手机远程控制家电和安全系统。 #生活知识# #科技生活# #科技改变生活# #物联网#
产品功能:STM32单片机通过ESP8266与阿里云平台进行通信,接受到阿里云平台(具有配套的APP)的数据进而执行相应操作:打开LED、关闭LED
硬件设备:
STM32 C8T6单片机
ESP8266模块
USB转TTL模块
3.3V供电设备
一、整体思路:
①:首先STM32单片机通过ESP8266模块连接路由器进而和阿里云建立TCP连接
②:在阿里云平台创建设备和添加产品(获得三段码:产品ID、设备名称、设备秘钥 非常重要)
③:STM32单片机通过ESP8266向阿里云发送连接和订阅报文
④:连接和订阅成功后,开始上发和接受数据,并执行相应的指令
二、硬件设备搭建:
使用STM32单片机的两个串口进行数据的传输:
①串口1:通过USB转TTL模块连接PC端,通过XCOM来显示一些信息
②串口和ESP8266模块进行连接
③LED灯使用的是C8T6单片机默认的PC13
三、阿里云平台的搭建:
放一个视频供大家参考
基于STM32单片机ESP8266物联网阿里云MQTT多路继电器控制
链接: 视频链接
四、代码实现部分:
main.c
①:首先是串口1、串口2、LED、Wifi、MQTT等的初始化:
// An highlighted block int main(void) {Delay_Init(); //延时功能初始化Usart1_Init(9600); //串口1功能初始化,波特率9600Usart2_Init(115200); //串口2功能初始化,波特率115200TIM4_Init(300,7200); //TIM4初始化,定时时间 300*7200*1000/72000000 = 30msLED_Init(); //LED初始化KEY_Init(); //按键初始化WiFi_ResetIO_Init(); //初始化WiFi的复位IO MQTT_Buff_Init(); //初始化接收,发送,命令数据的 缓冲区 以及各状态参数AliIoT_Parameter_Init(); //初始化连接阿里云IoT平台MQTT服务器的参数 123456789101112
②进入while(1)循环中,首先是对ESP8266发送AT指令连接路由器并且和阿里云建立TCP连接
在wifi.h中定义了路由器的名称和密码,其他的是一些功能函数:
// An highlighted block #define SSID "MERCURY_725E" //路由器SSID名称 #define PASS "15127963426" //路由器密码 void WiFi_ResetIO_Init(void); char WiFi_SendCmd(char *cmd, int timeout); char WiFi_Reset(int timeout); char WiFi_JoinAP(int timeout); char WiFi_Connect_Server(int timeout); char WiFi_Smartconfig(int timeout); char WiFi_WaitAP(int timeout); char WiFi_Connect_IoTServer(void); 123456789101112
wifi.c中主要是对ESP8266发送AT指令,设置ESP8266的模式,从而连接路由器和与阿里云建立TCP连接:
(源代码写的确实有点详细了,我也没有改动直接按这样用的。0.0)
// An highlighted block var foo = 'bar'; char WiFi_Connect_IoTServer(void) {u1_printf("准备复位模块\r\n"); //串口提示数据if(WiFi_Reset(50)){ //复位,100ms超时单位,总计5s超时时间u1_printf("复位失败,准备重启\r\n"); //返回非0值,进入if,串口提示数据return 1; //返回1}else u1_printf("复位成功\r\n"); //串口提示数据u1_printf("准备设置STA模式\r\n"); //串口提示数据if(WiFi_SendCmd("AT+CWMODE=1",50)){ //设置STA模式,100ms超时单位,总计5s超时时间u1_printf("设置STA模式失败,准备重启\r\n"); //返回非0值,进入if,串口提示数据return 2; //返回2}else u1_printf("设置STA模式成功\r\n"); //串口提示数据if(wifi_mode==0){ //如果联网模式=0:SSID和密码写在程序里u1_printf("准备取消自动连接\r\n"); //串口提示数据if(WiFi_SendCmd("AT+CWAUTOCONN=0",50)){ //取消自动连接,100ms超时单位,总计5s超时时间u1_printf("取消自动连接失败,准备重启\r\n"); //返回非0值,进入if,串口提示数据return 3; //返回3}else u1_printf("取消自动连接成功\r\n"); //串口提示数据u1_printf("准备连接路由器\r\n"); //串口提示数据if(WiFi_JoinAP(30)){ //连接路由器,1s超时单位,总计30s超时时间u1_printf("连接路由器失败,准备重启\r\n"); //返回非0值,进入if,串口提示数据return 4; //返回4}else u1_printf("连接路由器成功\r\n"); //串口提示数据}else{ //如果联网模式=1:Smartconfig方式,用APP发送if(KEY2_IN_STA==0){ //如果此时K2是按下的u1_printf("准备设置自动连接\r\n"); //串口提示数据if(WiFi_SendCmd("AT+CWAUTOCONN=1",50)){ //设置自动连接,100ms超时单位,总计5s超时时间u1_printf("设置自动连接失败,准备重启\r\n"); //返回非0值,进入if,串口提示数据return 3; //返回3}else u1_printf("设置自动连接成功\r\n"); //串口提示数据u1_printf("准备开启Smartconfig\r\n"); //串口提示数据if(WiFi_SendCmd("AT+CWSTARTSMART",50)){ //开启Smartconfig,100ms超时单位,总计5s超时时间u1_printf("开启Smartconfig失败,准备重启\r\n");//返回非0值,进入if,串口提示数据return 4; //返回4}else u1_printf("开启Smartconfig成功\r\n"); //串口提示数据u1_printf("请使用APP软件传输密码\r\n"); //串口提示数据if(WiFi_Smartconfig(60)){ //APP软件传输密码,1s超时单位,总计60s超时时间u1_printf("传输密码失败,准备重启\r\n"); //返回非0值,进入if,串口提示数据return 5; //返回5}else u1_printf("传输密码成功\r\n"); //串口提示数据u1_printf("准备关闭Smartconfig\r\n"); //串口提示数据if(WiFi_SendCmd("AT+CWSTOPSMART",50)){ //关闭Smartconfig,100ms超时单位,总计5s超时时间u1_printf("关闭Smartconfig失败,准备重启\r\n");//返回非0值,进入if,串口提示数据return 6; //返回6}else u1_printf("关闭Smartconfig成功\r\n"); //串口提示数据}else{ //反之,此时K2是没有按下u1_printf("等待连接路由器\r\n"); //串口提示数据if(WiFi_WaitAP(30)){ //等待连接路由器,1s超时单位,总计30s超时时间u1_printf("连接路由器失败,准备重启\r\n"); //返回非0值,进入if,串口提示数据return 7; //返回7}else u1_printf("连接路由器成功\r\n"); //串口提示数据}}u1_printf("准备设置透传\r\n"); //串口提示数据if(WiFi_SendCmd("AT+CIPMODE=1",50)){ //设置透传,100ms超时单位,总计5s超时时间u1_printf("设置透传失败,准备重启\r\n"); //返回非0值,进入if,串口提示数据return 8; //返回8}else u1_printf("设置透传成功\r\n"); //串口提示数据u1_printf("准备关闭多路连接\r\n"); //串口提示数据if(WiFi_SendCmd("AT+CIPMUX=0",50)){ //关闭多路连接,100ms超时单位,总计5s超时时间u1_printf("关闭多路连接失败,准备重启\r\n"); //返回非0值,进入if,串口提示数据return 9; //返回9}else u1_printf("关闭多路连接成功\r\n"); //串口提示数据u1_printf("准备连接服务器\r\n"); //串口提示数据if(WiFi_Connect_Server(100)){ //连接服务器,100ms超时单位,总计10s超时时间u1_printf("连接服务器失败,准备重启\r\n"); //返回非0值,进入if,串口提示数据return 10; //返回10}else u1_printf("连接服务器成功\r\n"); //串口提示数据return 0; //正确返回0 }
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283③:通过ESP8266向阿里云发送连接和订阅报文
这个完全不用改,直接用:
// An highlighted block /*----------------------------------------------------------*/ /*函数名:连接服务器报文 */ /*参 数:无 */ /*返回值:无 */ /*----------------------------------------------------------*/ void MQTT_ConectPack(void) { 、、、、、、、因为很长就不复制粘贴了。 } /*----------------------------------------------------------*/ /*函数名:SUBSCRIBE订阅topic报文 */ /*参 数:QoS:订阅等级 */ /*参 数:topic_name:订阅topic报文名称 */ /*返回值:无 */ /*----------------------------------------------------------*/ void MQTT_Subscribe(char *topic_name, int QoS) { 、、、、、、、、、、 }
12345678910111213141516171819202122④:接受阿里云(有配套的APP)发送过来的消息,进而执行打开和关闭LED
代码:
// An highlighted block if(MQTT_CMDOutPtr != MQTT_CMDInPtr){ //if成立的话,说明命令缓冲区有数据了 u1_printf("命令:%s\r\n",&MQTT_CMDOutPtr[2]); //串口输出信息if(strstr((char *)MQTT_CMDOutPtr+2,"\params\":{\"PowerSwitch\":1}")){ LED1_ON;//接受到‘1’的命令,打开LED LED1_State();//并上传此时LED状态的信息 }else if(strstr((char *)MQTT_CMDOutPtr+2,"\params\":{\"PowerSwitch\":0}")){ LED1_OFF;//接受到‘0’的命令,关闭LED LED1_State();//并上传此时LED状态的信息 } MQTT_CMDOutPtr += BUFF_UNIT; //指针下移if(MQTT_CMDOutPtr==MQTT_CMDEndPtr) //如果指针到缓冲区尾部了MQTT_CMDOutPtr = MQTT_CMDBuf[0]; //指针归位到缓冲区开头 }//处理命令缓冲区数据的else if分支结尾 1234567891011121314
LED1_State(); LED状态返回函数:
void LED1_State(void) {char temp[256];if(LED1_IN_STA)sprintf(temp,"{\"method\":\"thing.event.property.post\",\"id\":\"203302322\",\"params\":{\"PowerSwitch\":0},\"version\":\"1.0.0\"}");elsesprintf(temp,"{\"method\":\"thing.event.property.post\",\"id\":\"203302322\",\"params\":{\"PowerSwitch\":1},\"version\":\"1.0.0\"}"); } 12345678
APP界面:
网址:基于STM32单片机ESP8266物联网阿里云的远程控制LED系统 https://www.yuejiaxmz.com/news/view/142035
相关内容
esp8266配合阿里云生活物联网实现远程控制继电器智能家居新体验:ESP8266结合阿里云生活物联网远程控制继电器
基于STM32的宠物远程投喂和监测系统设计
【阿里云生活物联网架构师专题 ②】esp8266 sdk 直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制;
基于STM32的智能家居系统:MQTT、AT指令、TCP\HTTP、IIC技术
基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块+DHT11温湿度采集+MQ系列 烟雾及可燃气体+蜂鸣器+步进电机模拟窗帘+OLED液晶显示+
基于STM32的智能家居语音控制系统:集成LD3320、ESP8266设计流程
基于STM32的智能宠物看护喂养系统(程序源码+原理图+PCB+Boom表+实物操作说明)
基于stm32的家庭安全监测系统
STM32毕业设计——基于STM32+MQTT+WiFi技术的智能家居系统设计与实现(毕业论文+程序源码)——智能家居系统