当前位置:   article > 正文

第四步:基于STM32F407标准库移植机智云代码(控制LED灯)_机智云串口一的相关代码

机智云串口一的相关代码

目录

1、机智云协议代码下载

2、工程模板准备

3、协议及外设移植

4、代码修改

4.1、修改usart3.c文件

4.2、修改timer.c文件

4.3、修改 gizwits_product.c 文件

4.4、修改usart.c文件

4.5、添加main.c代码

5、编译及改错

6、功能测试

6.1、ESP8266接线方法

6.2、ESP8266配网

6.3、APP控制


1、机智云协议代码下载

生成代码时选择其他平台生成,生成后代码并将其下载解压,如下:

在我们移植之前,必须知道需移植的MCU是否具备以下条件

①平台支持两个串口接口(至少一个,两个方便调试),一个负责与 wifi 模组间的数据收发,一个用于调试信息打印,WIFI通讯串口波特率必须是 9600。

②平台支持定时器(1ms 精确定时)为系统运行提供时基。

③平台支持至少 2K 的 RAM 空间(可调整环形缓冲接收区大小,来解决数据协议的处理异常问题)。


2、工程模板准备

因为要用到TIM、USART,所以我们直接使用原子的定时器工程进行移植,首先修改工程目录名字


3、协议及外设移植

通过机智云生成的其他平台代码内的Gizwits、Utils文件夹复制到我们的工程目录

移植到工程中

在HARDWARE里面创建KEY和USART对应的文件夹,并将写好相关代码

将串口、按键以及Gizwits的代码全部添加到工程中(对于怎么添加创建文件,指定头文件路径这些这里就不再赘述)


4、代码修改

4.1、修改usart3.c文件

在usart3.c文件中编写串口3的初始化和中断服务函数,将中断接收的数据写入到gizPutData()函数,代码如下:

4.2、修改timer.c文件

在定时器 3 中断服务函数中添加 gizTimerMs()函数,并且添加 gizwits_product.h 头文件,代码如下:

(注意:gizwits_product.h 文件中没有对 gizTimerMs()函数做声明,需自己添加,否则编译会出现警报)

4.3、修改 gizwits_product.c 文件

因为我们修改gizwits_product.c文件用到 LED和串口发送,所以要添加头文件 led.h 和usart3.h。

在uartWrite函数中添加串口3发送函数,而GIZWITS_LOG用到printf定义在工程SYSTEM分组下 usart.c 文件已经有添加了,我们不需要再添加,需要添加代码如下:

添加完串口发送函数后,回到 gizwitsEventProcess()用户处理事件函数中添加我们的用户事件逻辑,这里我们是控制 LED 的亮灭, 在 EVENT_LEDONOFF 事件中根据返回的开关量添加其 LED1的开关控制,代码如下

在mcuRestart()函数中添加软复位函数,代码如下:

4.4、修改usart.c文件

4.5、添加main.c代码

  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "timer.h"
  7. #include "usart3.h"
  8. #include "gizwits_product.h"
  9. //dataPoint_t currentDataPoint;
  10. void Gizwits_Init(void)
  11. {
  12. TIM3_Int_Init(10-1,8400-1); //1MS
  13. usart3_init(9600);//WIFI
  14. memset((uint8_t*)&currentDataPoint, 0, sizeof(dataPoint_t));
  15. gizwitsInit();//
  16. }
  17. //void userHandle(void)
  18. //{
  19. LED1
  20. if(LED1==0)
  21. currentDataPoint. valueLED_OnOff= 1;
  22. else if(LED1==1)
  23. currentDataPoint. valueLED_OnOff= 0;
  24. //}
  25. int main(void)
  26. {
  27. int key;
  28. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  29. delay_init(168);
  30. uart_init(115200);
  31. LED_Init();
  32. KEY_Init();
  33. Gizwits_Init();
  34. while(1)
  35. {
  36. userHandle();//Óû§²É¼¯
  37. gizwitsHandle((dataPoint_t *)&currentDataPoint);
  38. key = KEY_Scan(0);
  39. if(key==KEY1_PRES)//KEY1
  40. {
  41. printf("WIFI ½øÈë AirLink ģʽ\r\n");
  42. gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link
  43. }
  44. if(key==WKUP_PRES)//KEY_UP
  45. {
  46. printf("WIFI¸´Î»,ÇëÖØÐÂÅäÖÃ\r\n");
  47. gizwitsSetMode(WIFI_RESET_MODE);//WIFI
  48. }
  49. delay_ms(200);
  50. LED0=!LED0;
  51. }
  52. }

5、编译及改错

修改完成后编译下整个工程,应该会提示如下2个重复定义的错,保留其中一个,只需要去gizwits_product.c或者main.c删除或屏蔽掉即可:

解决办法:

删除或屏蔽gizwits_product.c里的userHandle

删除或屏蔽gizwits_product.c里的dataPoint_t currentDataPoint;


6、功能测试

6.1、ESP8266接线方法

将ESP8266对应的引脚接在开发板上的串口3上就可以了,接线方法如下图:

6.2、ESP8266配网

按下KEY1按键,ESP8266进入AieLink模式(具体怎么配网我下一篇博客会聚集讲解),配网成功后会反馈一下信息,如下图所示:

6.3、APP控制

成功后就可以通过Demo APP进行控制,控制灯和控制继电器原理都一样,都是高低电平导通!

控制时串口助手上也会反馈相关数据,方便我们调试,如下图所示:

那么我们就算是大功告成,此时,手机端把WIFI关掉,就可以直接用数据流量进行控制。配网成功后,只要硬件端不断电,那么我们就能随时随地的用手机去进行远程控制,这就是物联网应用。


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

闽ICP备14008679号