当前位置:   article > 正文

物联网智能家居实战-基础班第6节(编写初步程序)_物联网系统开发小程序代码大全

物联网系统开发小程序代码大全

前言:以下内容基于 百问网 黄老师的 7天实战训练的个人总结

第6节主要学习了基于STM32F103C8T6的WIFI模块ESP8266的连接软件编写:

主要内容为UDP的连接,正常的通信流程如下:

  1. //在头文件里进行声明
  2. uint8_t ESP8266_SendCommand(char *cmd,char *reply,uint16_timeout);
  3. //向ESP8266发送数据的函数
  4. uint8_t ESP8266_SendCommand(char *cmd,char *reply,uint16_timeout)
  5. {
  6. //1.保存传入的指令
  7. char buf[256] = {0};
  8. strcat(buf,cmd);
  9. //2.处理AT指令(如果buf内没有"\r\n",则添加)
  10. if(strstr(buf,"\r\n")==0)
  11. {
  12. strcat(buf,"\r\n"); // 添加换行
  13. }
  14. //3.清理之前接收在BUF里面的数据
  15. ClearBuf();
  16. //4.发送数据((uint8_t *)buf为强制类型转换)
  17. USART2_Transmit((uint8_t)buf,strlen(buf),500);
  18. //5.接收数据
  19. memset(buf,0,256); //数据清空
  20. while(timeout !=0) //超时控制
  21. {
  22. if(USART2_Receive((uint8_t *)buf) //接收数据
  23. {
  24. if(strstr(buf,reply)) //检查结果
  25. {
  26. printf("%s Send ok ! \r\n",cmd) //发送成功打印信息,并加入换行。
  27. return 0;
  28. }
  29. else
  30. {
  31. timeout--;
  32. HAL_Delay(1);
  33. }
  34. }
  35. }
  36. printf("%s Send error !",cmd)//发送失败打印
  37. return 1;
  38. }

按UDP通信的顺序在main函数内增加指令:

  1. ESP8266_SendCommand("AT+RST","OK""200"); //模块复位
  2. HAL_Delay(800); //因为复位后信息较多,会对后续指令接收造成影响,所以增加延时
  3. ESP8266_SendCommand("AT+CWMODE=1","OK""200");//模式设置
  4. ESP8266_SendCommand("AT+CWJAP=\"NETGEAR\",\"100ask.cq\"","OK""3000");//WIFI连接
  5. ESP8266_SendCommand("AT+CIPSTART=\"UDP\",\"192.168.50.230\",9999,9999,2","OK""500");//通讯连接

获取IP就不能用这个函数了,所以要单独建立一个IP获取函数:

  1. //获取ESP8266的IP
  2. uint8_t ESP8266_GetIP(void)
  3. {
  4. uint16_t timeout =500 ;
  5. //1.准备发送的指令AT+CIFSR
  6. char buf[256] = {0};
  7. strcat(buf,"AT+CIFSR\r\n");
  8. //2.清理之前接收在BUF里面的数据
  9. ClearBuf();
  10. //4.发送数据((uint8_t *)buf为强制类型转换)
  11. USART2_Transmit((uint8_t)buf,strlen(buf),500);
  12. //5.接收数据
  13. memset(buf,0,256); //数据清空
  14. while(timeout !=0) //超时控制
  15. {
  16. if(USART2_Receive((uint8_t *)buf) //接收数据
  17. {
  18. if(strstr(buf,"OK")) //检查结果
  19. {
  20. printf("%s ,buf) //发送成功打印信息,并加入换行。
  21. return 0;
  22. }
  23. else
  24. {
  25. timeout--;
  26. HAL_Delay(1);
  27. }
  28. }
  29. }
  30. printf("%Get IP Failed ! \r\n");//获取失败
  31. return 1;
  32. }

接下来配置下KEY的函数

  1. static uint8_t key_flag = 0;
  2. uint8_t key_GetFlag(void)
  3. {
  4. if(key_flag)
  5. {
  6. key_flag = 0;
  7. return 1;
  8. }
  9. else
  10. return 0;
  11. }
  12. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  13. {
  14. if(GPIO_Pin == KEY_Pin)
  15. {
  16. key_flag = 1;
  17. }
  18. }

增加发送数据函数

  1. //ESP8266发送UDP数据
  2. uint8_t ESP8266_Send_UDP(char *data)
  3. {
  4. //1.准备发送的指令 AT+CIPSEND = len
  5. char buf[256] = {0};
  6. uint8_t len =strlen(data);
  7. sprintf(buf,"AT+CIPSEND=%d\r\n",len);//把格式化数据写入
  8. if(ESP8266_SendConmmand(buf,"OK",500)==0) //发送指令
  9. {
  10. ESP8266_SendConmmand(data,"SEND OK",1000);//发送数据
  11. return 0;
  12. }
  13. return 1;
  14. }

在主函数主循环中增加功能调用,注意此发送格式为与微信小程序相匹配的,如果与其他设备对接需按其协议要求内容发送。

  1. while(1)
  2. {
  3. if(Key_GetFlag())//如果按键被按下
  4. {
  5. ESP8266_Send_UDP("{\"data\":\"doorbell\",\"status\":\"1\"}");
  6. }
  7. }

以上发送数据部分就完成了,接下来增加接收数据的部分。 

  1. if(USART2_Receive(rx_data))
  2. {
  3. if(strstr((char *)rx_data,"\"dev\":\"led\",\"status\":\"0\""))//收到的指令状态为“0
  4. {
  5. HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET); // LED灯 灭
  6. USART2_ClearBUF(); //清除串口缓存数据
  7. memset(rx_data,0,200); //清除data缓存数据
  8. }
  9. else if(strstr((char *)rx_data,"\"dev\":\"led\",\"status\":\"1\""))//指令状态为“1
  10. {
  11. HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);// LED灯 亮
  12. USART2_ClearBUF(); //清除串口缓存数据
  13. memset(rx_data,0,200); //清除data缓存数据
  14. }
  15. }

所有代码编写完成,打开微信小程序。开发板按键发送IP地址,将小程序的IP和端口按要求设置好。点台灯按钮,开发板上LED随着小程序的状态亮灭。

 本篇总结完成,感兴趣的同学可以尝试自己搭建,内容学习及部分配图源于百问网相关教程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/572522
推荐阅读
相关标签
  

闽ICP备14008679号