收藏官网首页
查看: 14773|回复: 3

【官方】MCU通过WIFI模块与机智云通信

140

主题

418

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12682
跳转到指定楼层
楼主
发表于 2020-2-7 12:29:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
STM32CubeMX移植机智云自动生成代码STM32CubeMX配置GPIO口




STM32CubeMX配置USART外设

STM32CubeMX配置1ms定时器


STM32CubeMX配置外部按键

生成代码



移植代码

从机智云“stm32f103c8x”平台生成的代码中复制Gizwits、Hal、Utils文件夹到当前目录:


在工程中添加如下的目录结构:


修改代码

首先在gizwits_product.h / hal_key.h 中将原来F103C8平台的头文件 #include <stm32f1xx.h>替换为G071RB平台的 #include <stm32g0xx.h>

然后修改如下代码:

修改gizwits_product.c代码:






















添加app.c代码:

  1. /* Includes ------------------------------------------------------------------*/
  2. #include "app.h"
  3. #include "sht30.h"
  4. #include "gizwits_protocol.h"
  5. #include "gizwits_product.h"
  6. #include "hal_key.h"

  7. #define GPIO_KEY_NUM 2 ///< Defines the total number of key member
  8. #define KEY1_Pin GPIO_PIN_11
  9. #define KEY1_GPIO_Port GPIOA
  10. #define KEY2_Pin GPIO_PIN_4
  11. #define KEY2_GPIO_Port GPIOA

  12. ///------------------- G0 TO F7 ------------------------
  13. static short temperature = 0, humidity = 0;  
  14. float gizwits_temperature = 0, gizwits_humidity = 0;
  15. uint8_t tui_buf[10];
  16. #define FRM_START                0x68
  17. #define FRM_CMD_UPD_SENSOR       0x01//温湿度传感器
  18. #define FRM_CMD_UPD_RESTWIFI     0x02//复位WIFI
  19. #define FRM_CMD_UPD_AIRLINK      0x03//配置WIFI到路由器
  20. #define FRM_CMD_UPD_CONFIGEND    0x04//链接到路由器
  21. #define FRM_FIXLEN               14
  22. #define FRM_END0                 0x5c
  23. #define FRM_END1                 0x6e

  24. #define FRM_POS_START            0
  25. #define FRM_POS_CMD              1      
  26. #define FRM_POS_LEN              2
  27. #define FRM_POS_DATA             3
  28. #define FRM_POS_CRC              11
  29. #define FRM_POS_END0             12
  30. #define FRM_POS_END1             13

  31. keysTypedef_t keys;
  32. keyTypedef_t singleKey[GPIO_KEY_NUM]; ///< Defines a single key member array pointer
  33. static uint8_t s_wifi_router_status = 0;
  34. static void update_to_ui_wifi_status(uint8_t cmd)
  35. {
  36.     if(cmd==FRM_CMD_UPD_RESTWIFI||cmd==FRM_CMD_UPD_AIRLINK||cmd==FRM_CMD_UPD_CONFIGEND)
  37.     {
  38.       s_wifi_router_status = cmd;
  39.     }
  40. }

  41. void ConfigWIFIfinish(void)
  42. {
  43.         update_to_ui_wifi_status(FRM_CMD_UPD_CONFIGEND);
  44. }
  45. void key1ShortPress(void)
  46. {
  47.     GIZWITS_LOG("KEY1 PRESS ,Production Mode\n");
  48.     gizwitsSetMode(WIFI_PRODUCTION_TEST);
  49. }
  50. /**
  51. * key1 long press handle
  52. * @param none
  53. * @return none
  54. */
  55. void key1LongPress(void)
  56. {
  57.     GIZWITS_LOG("KEY1 PRESS LONG ,Soft AP\n");
  58.     gizwitsSetMode(WIFI_SOFTAP_MODE);
  59. }
  60. /**
  61. * key2 short press handle
  62. * @param none
  63. * @return none
  64. */
  65. void key2ShortPress(void)
  66. {
  67.         GIZWITS_LOG("------>KEY2 PRESS,Air Link mode\n\r");
  68.         #if !MODULE_TYPE
  69.         gizwitsSetMode(WIFI_AIRLINK_MODE);
  70.         update_to_ui_wifi_status(FRM_CMD_UPD_AIRLINK);
  71.         #endif
  72. }
  73. /**
  74. * key2 long press handle
  75. * @param none
  76. * @return none
  77. */
  78. void key2LongPress(void)
  79. {
  80.         //AirLink mode
  81.         GIZWITS_LOG("KEY2 PRESS LONG ,Wifi Reset mode\n");
  82.         #if !MODULE_TYPE
  83.         gizwitsSetMode(WIFI_RESET_MODE);
  84.         update_to_ui_wifi_status(FRM_CMD_UPD_RESTWIFI);
  85.         #endif
  86. }
  87. void keyInit(void)
  88. {
  89.     singleKey[0] = keyInitOne(NULL, KEY1_GPIO_Port, KEY1_Pin, key1ShortPress, key1LongPress);
  90.     singleKey[1] = keyInitOne(NULL, KEY2_GPIO_Port, KEY2_Pin, key2ShortPress, key2LongPress);
  91.     keys.singleKey = (keyTypedef_t *)&singleKey;
  92.     keyParaInit(&keys);
  93. }


  94. typedef struct __frame_sensor_to_ui{
  95.         uint8_t start ;
  96.         uint8_t cmd;
  97.         uint8_t len;
  98.         uint8_t data[8];
  99.         uint8_t crc;
  100.         uint8_t end ;        
  101. }_frame_sensor_to_ui;
  102. _frame_sensor_to_ui s_frame_sensor_to_ui;

  103. //eg:68 cmd len t t h h x x y y crc 16 / crc = 68 + cmd + len + t + t + h + h + x + x + y + y 16
  104. extern UART_HandleTypeDef huart2;
  105. uint8_t cal_crc(uint8_t *buf,uint8_t len)
  106. {
  107.        uint8_t t_crc = 0;
  108.        uint8_t r_crc = 0;
  109.         //check crc
  110.         for(int i=0; i<len ;i++)
  111.         {
  112.                 t_crc += buf[i];
  113.         }
  114.         r_crc = (uint8_t)t_crc;
  115.         return r_crc;
  116. }

  117. #define __DEBUG_UPDATE_UI_ARRAY__
  118. void update_to_ui(uint8_t cmd,uint8_t *data)
  119. {
  120.         uint8_t t_buf[20];
  121.         int i = 0;
  122.         memset(t_buf,0,sizeof(t_buf));
  123.         t_buf[FRM_POS_START]=FRM_START;
  124.         t_buf[FRM_POS_CMD]=cmd;
  125.         t_buf[FRM_POS_LEN]=FRM_FIXLEN;
  126.         t_buf[FRM_POS_DATA]= data[0];
  127.         t_buf[FRM_POS_DATA+1]= data[1];
  128.         t_buf[FRM_POS_DATA+2]= data[2];
  129.         t_buf[FRM_POS_DATA+3]= data[3];
  130.         t_buf[FRM_POS_DATA+4]= s_wifi_router_status;     //wifi status update
  131.         t_buf[FRM_POS_DATA+5]= 0;
  132.         t_buf[FRM_POS_DATA+6]= 0;
  133.         t_buf[FRM_POS_DATA+7]= 0;
  134.         t_buf[FRM_POS_CRC]=cal_crc(t_buf,FRM_FIXLEN-3);
  135.         t_buf[FRM_POS_END0]=FRM_END0;
  136.         t_buf[FRM_POS_END1]=FRM_END1;
  137. #ifdef __DEBUG_UPDATE_UI_ARRAY__
  138.         GIZWITS_LOG("update_to_ui:");
  139.         for(i=0; i<FRM_FIXLEN; i++)
  140.         {
  141.             GIZWITS_LOG("x ", t_buf[i]);
  142.         }
  143.         GIZWITS_LOG("\n\r");
  144. #endif
  145.         HAL_UART_Transmit(&huart2, t_buf, FRM_FIXLEN, 0xFFFF);
  146. }

  147. ///------------------- APP ------------------------
  148. extern int SHT3X_GetTempAndHumi(short *temp, short *humi);
  149. void APP_Init(void)
  150. {
  151.         s_wifi_router_status = 0;
  152.         SHT3X_Init();

  153.         timerInit();
  154.         uartInit();

  155.         userInit();
  156.         gizwitsInit();
  157.         keyInit();
  158.         GIZWITS_LOG("MCU Init Success \n");

  159.         printf("MCU HAL Success , SoftVersion = %s\r\n",SOFTWARE_VERSION);
  160.         Pro_D2W_Ask_Module_Reboot();
  161. }
  162. void APP_Process(void)
  163. {       
  164.         if(SHT3X_GetTempAndHumi(&temperature, &humidity)==0)
  165.         {
  166.                 gizwits_temperature = temperature/10.00;
  167.                 gizwits_humidity = humidity / 10.00;
  168.                 tui_buf[0] = ((temperature >> 8) & 0xff);
  169.                 tui_buf[1] = (temperature & 0xff);
  170.                 tui_buf[2] = ((humidity >> 8) & 0xff);
  171.                 tui_buf[3] = (humidity & 0xff);
  172.                 update_to_ui(FRM_CMD_UPD_SENSOR,tui_buf);
  173.                 //printf("temp=%0.1f,humi=%0.1f\r\n",gizwits_temperature,gizwits_humidity);
  174.         }
  175. }
复制代码

修改main.c的代码


  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */
  4.   unsigned int tmp, tick = 0;
  5.   /* USER CODE END 1 */
  6.   

  7.   /* MCU Configuration--------------------------------------------------------*/

  8.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  9.   HAL_Init();

  10.   /* USER CODE BEGIN Init */

  11.   /* USER CODE END Init */

  12.   /* Configure the system clock */
  13.   SystemClock_Config();

  14.   /* USER CODE BEGIN SysInit */

  15.   /* USER CODE END SysInit */

  16.   /* Initialize all configured peripherals */
  17.   MX_GPIO_Init();
  18.   MX_USART2_UART_Init();
  19.   MX_TIM2_Init();
  20.   MX_USART1_UART_Init();
  21.   MX_USART3_UART_Init();
  22.   MX_USART4_UART_Init();
  23.   MX_I2C1_Init();
  24.   MX_IWDG_Init();
  25.   /* USER CODE BEGIN 2 */
  26.   APP_Init();
  27.         __HAL_IWDG_START(&hiwdg);
  28.   while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4)==GPIO_PIN_RESET);//等待F7输出的按键信号稳定
  29.   HAL_GPIO_WritePin(ESP_RST_GPIO_Port, ESP_RST_Pin, GPIO_PIN_SET);

  30.   /* USER CODE END 2 */

  31.   /* Infinite loop */
  32.   /* USER CODE BEGIN WHILE */
  33.   while (1)
  34.   {
  35.     /* USER CODE END WHILE */

  36.     /* USER CODE BEGIN 3 */
  37.         tmp = HAL_GetTick();
  38.         if(tmp - tick > 1000)
  39.         {
  40.               tick = tmp;
  41.               APP_Process();
  42.               userHandle();
  43.               __HAL_IWDG_RELOAD_COUNTER(&hiwdg);
  44.               //printf("APP_Process\n\r");
  45.         }
  46.                
  47.                 gizwitsHandle((dataPoint_t *)¤tDataPoint);
  48.   }
  49.   /* USER CODE END 3 */
  50. }
复制代码


2

主题

9

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
沙发
发表于 2021-9-2 20:59:33 | 只看该作者
请问这个然后应该怎么连接wifi呀

点评

通过配网进行绑定  详情 回复 发表于 2021-9-3 17:55
板凳
发表于 2021-9-3 17:55:34 | 只看该作者
Thief 发表于 2021-9-2 20:59
请问这个然后应该怎么连接wifi呀

通过配网进行绑定

点评

请问有详细点的操作步骤吗,之前没有接触过WiFi模块 是不是需要像蓝牙一样进行一些配置然后才可以进行连接 谢谢  详情 回复 发表于 2021-9-6 21:48
发烧友

2

主题

9

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
地板
发表于 2021-9-6 21:48:06 | 只看该作者
冯俊波 发表于 2021-9-3 17:55
通过配网进行绑定

请问有详细点的操作步骤吗,之前没有接触过WiFi模块  是不是需要像蓝牙一样进行一些配置然后才可以进行连接  谢谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表