ESP8266物联网远距离控制实现
转载请注明出处!
重要的事情放在前面源码在GitHub上面欢迎issue,如果可以的话Star一下也是表示对作者的支持,有很多不足,希望可以得到指教。
不多说废话,开门见山。实现功能。单片机通过轮询查询服务器端的指定文件夹
下的内容,在显示屏上显示。手机端可以发送消息到服务器端来实现更改显示屏的
内容。
实际扩展可以实现手机端和单片机进行远程通信。理论上只需要有网络就可以实
现联系手机端发送消息到服务器,实际实现方式:服务器发送信息给单片机,单片
机返回信息给服务器,并将服务器返回的信息给手机。
心里路程,寒假接触了stm32,esp8266。没有实际去使用,加入的嵌入式要做结
营作品。就准备摸索一下ESP8266实现远距离控制。然后就在考完4级之后去学习做
这个通信。
工具
- Android studio
- Keil5
- STM32开发板
- ESP8266WIFI模块
- 网络调试工具,串口调试工具
- Eclipse
遇到的坑:
1.单片机调试的时候没能清楚理解单片机程序发送的信息在那里显示。单片机发送消
息给网络的代码是导致调试了很久。
2.单片机和服务器通信的时候,当单片机发送AT+CIPMODE=1和AT+CIPSEND需要服务
器返回信息OK
3.寻找单片机接受服务器的消息的代码,实际ESP8266打开了USART2串口,然后根据
返回信息进行判断,额外加了一个代码判断返回信息的标志。加了一个标志位即当读
到'\n'就认为是结束。
if(ucCh=='\n')
{
ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag = 1
}
4.服务器端的代码确保能打开端口,实现端口通信。如果不太懂可以打开防火墙,要
是被自己的防火墙给墙了也是一种极好的体验。
开发过程:
第一天:实现单片机和网络调试工具通信,通过网络调试工具发送信息给单片机。
第二天:继续做第一天任务,寻找服务器代码实现,学习之后实现自己的功能,实
现了服务器和单片机通信。
第三天:编写Android 移动程序实现和服务器的通信,继续编写服务器代码实现数
据通信。
第四天:收尾工作,写代码,写历程。emm该爬去复习了。溜了
ESP8266AT指令
- ESP8266初始化设置通信波特率。
- 1.发送AT指令看是否收到OK,没有就重启ESP8266
- 2.发送AT+CWMODE=1,设置工作模式为station,直到设置成功
- 3.AT+CWJAP=”你的WiFi名字”,”你的WiFi密码”,直到加入成功
- 4.发送AT+CIPMUX=0,设置禁止多连接模式
- 5.发送AT+CIPSTART=”TCP”,”192.168.1.111”,8080。表示去连连接192.168.1.111 的8080端口
- 6.发送AT+CIPMODE=1设置进入透传模式,响应为��。
- 7.发送AT+CIPSEND表示发送数据,等待服务器返回信息。
![数据显示](https://i-blog.csdnimg.cn/blog_migrate/17f1e3677627844ea30d40cc03fa0a83.jpeg)
int main()
{
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
LED_Init();
USART1_Init(115200);
ESP8266_Init(115200);
ESP8266_STA_TCPClient_Test();
}
void ESP8266_STA_TCPClient_Test(void)
{
char str[100]= {
0};
TFTLCD_Init();
ESP8266_CH_PD_Pin_SetH;
ESP8266_AT_Test();
ESP8266_Net_Mode_Choose(STA);
while(!ESP8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD));
ESP8266_Enable_MultipleId ( DISABLE );
while(!ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP, User_ESP8266_TCPServer_PORT, Single_ID_0));
while(!ESP8266_UnvarnishSend());
while ( 1 )
{
while(!ESP8266_UnvarnishSend());
if(ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag)
{
USART_ITConfig ( USART2, USART_IT_RXNE, DISABLE );
ESP8266_Fram_Record_Struct .Data_RX_BUF [ ESP8266_Fram_Record_Struct .InfBit .FramLength ] = &