Seasonic 发表于 2018-6-14 16:32:42

【STM32F4】STM32F407+ESP8266连接机智云过程详解

本帖最后由 Seasonic 于 2018-12-26 16:35 编辑

要求:通过手机上的机智云通用APP,点亮开发板载LED0、LED1
摘要

[*]硬件组成:STM32F407ZGT6+ESP8266(乐鑫)
[*]软件APP:机智云开发都者中心下载的通用APP Demo;Xcom串口调试助手;Keil V5;
[*]调试过程详解:
[*]注意事项:
[*]使用机智云后的几点建议:
一、硬件组成如下图所示:
(硬件全家福:开发板(STM32F407ZGT6+ESP8266)该开发板IO口配置:KEY1:               PE4;KEY2:               PA0;
LED0:               PF10;LED1:               PF9;
ESP8266-12F的管脚如链接所示:http://club.gizwits.com/thread-3551-1-1.html

二、下载通用APP DEMO:
[*]下载页面:https://download.gizwits.com/zh-cn/p/98/99
[*]根据自己的手机系统,选择下载相应的APP,如下图所示:


3.安装、注册、登陆后如下图所示:



三、调试过程详解:
[*]创建数据点
[*]生成MCU工程
[*]下载MCU工程并根据开发板原理图修改工程,修改的地方如程序中红色加注释的部分
main.c 中加入红色标出的GPIO初始化代码
static void MX_GPIO_Init(void)
{

GPIO_InitTypeDef GPIO_InitStruct;

/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
<font color="#ff0000">      __HAL_RCC_GPIOF_CLK_ENABLE();            //GPIOF CLKEnable:Used to Ctrol LED</font>

/*Configure GPIO pins : KEY2_Pin KEY1_Pin */
GPIO_InitStruct.Pin = KEY2_Pin|KEY1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
      
      /*Configure GPIO pin Output Level */
<font color="#ff0000">HAL_GPIO_WritePin(GPIOE, LED1_Pin|LED0_Pin, GPIO_PIN_SET);

      /*Configure GPIO pins : LED1_Pin LED0_Pin */
GPIO_InitStruct.Pin = LED1_Pin|LED0_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);</font>

}main.h头文件中增加以下内容/* USER CODE BEGIN Private defines */
<font color="#ff0000">#define LED1_Pin GPIO_PIN_9
#define LED1_GPIO_Port GPIOF
#define LED0_Pin GPIO_PIN_10
#define LED0_GPIO_Port GPIOF</font>
/* USER CODE END Private defines */

gizwits_product.c中需要用户添设备上电状态代码如下图所示void userInit(void)
{
    memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));
   
    /** Warning !!! DataPoint Variables Init , Must Within The Data Range **/
   
      currentDataPoint.valueValve = 0;
      currentDataPoint.valueLED0 = 1;
      currentDataPoint.valueLED1 = 1;
      currentDataPoint.valueState = 1;
      currentDataPoint.valueValue = 5;
}
gizwits_product.c中需要用户添加的代码如下图所示
int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *gizdata, uint32_t len)
{
uint8_t i = 0;
dataPoint_t *dataPointPtr = (dataPoint_t *)gizdata;
moduleStatusInfo_t *wifiData = (moduleStatusInfo_t *)gizdata;
protocolTime_t *ptime = (protocolTime_t *)gizdata;

#if MODULE_TYPE
gprsInfo_t *gprsInfoData = (gprsInfo_t *)gizdata;
#else
moduleInfo_t *ptModuleInfo = (moduleInfo_t *)gizdata;
#endif

if((NULL == info) || (NULL == gizdata))
{
    return -1;
}

for(i=0; i<info->num; i++)
{
    switch(info->event)
    {
      case EVENT_Valve:
      currentDataPoint.valueValve = dataPointPtr->valueValve;
      GIZWITS_LOG("Evt: EVENT_Valve %d \n", currentDataPoint.valueValve);
      if(0x01 == currentDataPoint.valueValve)
      {
          //user handle
             <font color="#ff0000">HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);                //led1闪烁 ,没有阀,用灯替代      
             HAL_Delay(500);
             HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);                //led0闪烁没有阀,用灯替代      
             HAL_Delay(500);</font>
      }
      else
      {
          //user handle
             <font color="#ff0000"> HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);                //熄灭led1      
            HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_SET);                //熄灭led0      </font>
      }
      break;
      case EVENT_LED0:
      currentDataPoint.valueLED0 = dataPointPtr->valueLED0;
      GIZWITS_LOG("Evt: EVENT_LED0 %d \n", currentDataPoint.valueLED0);
      if(0x01 == currentDataPoint.valueLED0)
      {
          //user handle
             <font color="#ff0000">HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET);      //点亮led0      </font>
      }
      else
      {
          //user handle   
            <font color="#ff0000"> HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);            //熄灭led0</font>      
                                       
      }
      break;
      case EVENT_LED1:
      currentDataPoint.valueLED1 = dataPointPtr->valueLED1;
      GIZWITS_LOG("Evt: EVENT_LED1 %d \n", currentDataPoint.valueLED1);
      if(0x01 == currentDataPoint.valueLED1)
      {
          //user handle
         <font color="#ff0000">HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);                //点亮led1 </font>                     
      }
      else
      {
          //user handle   
            <font color="#ff0000"> HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);                     //灭掉led1</font>               
      }
      break;




      case WIFI_SOFTAP:
      break;
      case WIFI_AIRLINK:
      break;
      case WIFI_STATION:
      break;
      case WIFI_CON_ROUTER:

      break;
      case WIFI_DISCON_ROUTER:

      break;
      case WIFI_CON_M2M:

      break;
      case WIFI_DISCON_M2M:
      break;
      case WIFI_RSSI:
      GIZWITS_LOG("RSSI %d\n", wifiData->rssi);
      break;
      case TRANSPARENT_DATA:
      GIZWITS_LOG("TRANSPARENT_DATA \n");
      //user handle , Fetch data from , size is
      break;
      case WIFI_NTP:
      GIZWITS_LOG("WIFI_NTP : [%d-%d-%d %02d:%02d:%02d][%d] \n",ptime->year,ptime->month,ptime->day,ptime->hour,ptime->minute,ptime->second,ptime->ntp);
      break;
      case MODULE_INFO:
            GIZWITS_LOG("MODULE INFO ...\n");
      #if MODULE_TYPE
            GIZWITS_LOG("GPRS MODULE ...\n");
            //Format By gprsInfo_t
      #else
            GIZWITS_LOG("WIF MODULE ...\n");
            //Format By moduleInfo_t
            GIZWITS_LOG("moduleType : [%d] \n",ptModuleInfo->moduleType);
      #endif
    break;
      default:
      break;
    }
}

return 0;
}   
4.程序烧录:使用FlyMCU进行程序烧写,   
5.打开APP操控体验
6.打开Xcom查看调试信息



四、注意事项:
[*]正确找出开发板的UART2接口:本开发板中对应关系如下:UART2_TX:PA2,UART2_RX:PA3,
[*]保证与ESP8266模块的管脚接线正确:V3.3(接开发板3.3V);
                                                                  GND(接开发板GND);
                                                                  TX   (接开发板的PA3管脚);
                                                                  RX   (接开发板的PA2管脚);   
3.由于本次使用的ESP8266是原来机智云二代产品上的,可能正常联上机智云,故没有给ESP8266烧写固件,关于固件烧写的内容,请参阅论坛的相关文档。

哎哟喂17 发表于 2018-6-15 18:08:05

请问这个是什么原因啊 硬件是照着上面的图接的串口2
KEY1 PRESS ,Production Mode
MCU2WiFi: ff ff 00 05 13 11 00 00 29
Warning:gizProtocolResendData 1147370 1147169 0
Warning: timeout, resend data
MCU2WiFi: ff ff 00 05 13 11 00 00 29
Warning:gizProtocolResendData 1147594 1147393 1
Warning: timeout, resend data
MCU2WiFi: ff ff 00 05 13 11 00 00 29
KEY2 PRESS ,Soft AP mode
MCU2WiFi: ff ff 00 06 09 12 00 00 01 22
Warning:gizProtocolResendData 1153730 1153529 0
Warning: timeout, resend data
MCU2WiFi: ff ff 00 06 09 12 00 00 01 22
Warning:gizProtocolResendData 1153956 1153755 1
Warning: timeout, resend data
MCU2WiFi: ff ff 00 06 09 12 00 00 01 22

Seasonic 发表于 2018-6-15 13:06:25

wlzx059 发表于 2018-6-14 19:07
详解的有点简单啊。。。。。

今天继续写,这个编辑环境还不太适应,看着好的,一保存和原来的不一样,加个超链接都格式会变,谢谢你的赏光

Seasonic 发表于 2019-10-24 09:36:47

ESP8266_12F管脚示意图

残局 发表于 2019-8-17 09:44:34

请问这个怎么接收数据啊,程序上没有接收程序的部分啊,只能下发控制

Seasonic 发表于 2018-6-20 11:01:08

Genius 发表于 2018-6-20 10:51
插入图片 需要插入图片的位置点击 图片

参考:


非常感谢你的指导。

Genius 发表于 2018-6-20 10:53:22

Seasonic 发表于 2018-6-20 10:10
想上传程序传不上,附件的最大为5M,这个怎么解?

那是因为会员等级的问题。   等级越高,上传的附件越大。

不过建议咯, 要是源码之类的云盘分享会好一点

Genius 发表于 2018-6-20 10:51:42

Seasonic 发表于 2018-6-15 14:27
请教一下,怎么上传的截图在编辑里不显示,一出来就在文档的末尾,没有在指定的位置上啊。 ...

插入图片 需要插入图片的位置点击 图片

参考:
http://club.gizwits.com/thread-3245-1-1.html

Seasonic 发表于 2018-6-20 10:10:56

Genius 发表于 2018-6-14 17:19
感谢分享~~~很受用

想上传程序传不上,附件的最大为5M,这个怎么解?

Seasonic 发表于 2018-6-20 10:10:33

Genius 发表于 2018-6-14 17:19
感谢分享~~~很受用

想上传程序传不上,附件的最大为5M,这个怎么解?

Seasonic 发表于 2018-6-20 10:05:36

caikan 发表于 2018-6-20 09:54
非常感谢楼主分享!

不客气,大家共同学习,进步,一个小的项目做完,写写文档,是一个捋顺,总结的过程,日积月累,有利提升。

caikan 发表于 2018-6-20 09:54:07

非常感谢楼主分享!

wlzx059 发表于 2018-6-17 10:37:13

Seasonic 发表于 2018-6-15 13:06
今天继续写,这个编辑环境还不太适应,看着好的,一保存和原来的不一样,加个超链接都格式会变,谢谢你的 ...

期待教程的再次发布:lol

Seasonic 发表于 2018-6-16 21:53:03

哎哟喂17 发表于 2018-6-15 18:08
请问这个是什么原因啊 硬件是照着上面的图接的串口2
KEY1 PRESS ,Production Mode
MCU2WiFi: ...

你这看着是MCU给WIFI发了,WIFI没有回,这种情况你检查一下接线的牢靠性,我开始也是因为杜邦线不牢靠,出现过这个问题

Seasonic 发表于 2018-6-15 14:33:52

Genius 发表于 2018-6-15 14:23
我要快速回复

代码中打成红色的部分显示这个代码:<font color="#ff0000">没有变成红色。

Seasonic 发表于 2018-6-15 14:27:55

Genius 发表于 2018-6-15 14:23
我要快速回复

请教一下,怎么上传的截图在编辑里不显示,一出来就在文档的末尾,没有在指定的位置上啊。

Genius 发表于 2018-6-15 14:23:21

我要快速回复

wlzx059 发表于 2018-6-14 19:07:40

详解的有点简单啊。。。。。

Genius 发表于 2018-6-14 17:28:27

Seasonic 发表于 2018-6-14 17:25
还得感谢机智云团队,给设备安上了翅膀,可以远程操控,由于个人水平局限性,写帖很生疏,也有很多错误, ...

一看排版 就觉得你是个认真细心的小伙子
没想到还很谦虚

Seasonic 发表于 2018-6-14 17:25:36

Genius 发表于 2018-6-14 17:19
感谢分享~~~很受用
还得感谢机智云团队,给设备安上了翅膀,可以远程操控,由于个人水平局限性,写帖很生疏,也有很多错误,还望大家多多指正。
页: [1] 2
查看完整版本: 【STM32F4】STM32F407+ESP8266连接机智云过程详解