从5方面描述STM32F407+ESP8266连接机智云过程

一、硬件组成如下图所示:
硬件全家福:
stm32f407zgt6+esp8266
二、下载通用app demo:
1.在应用商店,搜索“机智云”app。
通用app demo 又称“机智云”app
2.安装、注册、登陆后如下图所示:
三、调试过程详解:
创建数据点
生成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();
__hal_rcc_gpiof_clk_enable(); //gpiof clk enable:used to ctrol led
/*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 */
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);
}
main.h头文件中增加以下内容
/* user code begin private defines */
#define led1_pin gpio_pin_9
#define led1_gpio_port gpiof
#define led0_pin gpio_pin_10
#define led0_gpio_port gpiof
/* 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; inum; i++)
{
switch(info->event[i])
{
case event_valve:
currentdatapoint.valuevalve = datapointptr->valuevalve;
gizwits_log(evt: event_valve %d , currentdatapoint.valuevalve);
if(0x01 == currentdatapoint.valuevalve)
{
//user handle
hal_gpio_togglepin(led1_gpio_port,led1_pin); //led1闪烁 ,没有阀,用灯替代
hal_delay(500);
hal_gpio_togglepin(led0_gpio_port,led0_pin); //led0闪烁 没有阀,用灯替代
hal_delay(500);
}
else
{
//user handle
hal_gpio_writepin(led1_gpio_port,led1_pin,gpio_pin_set); //熄灭led1
hal_gpio_writepin(led0_gpio_port,led0_pin,gpio_pin_set); //熄灭led0
}
break;
case event_led0:
currentdatapoint.valueled0 = datapointptr->valueled0;
gizwits_log(evt: event_led0 %d , currentdatapoint.valueled0);
if(0x01 == currentdatapoint.valueled0)
{
//user handle
hal_gpio_writepin(gpiof,gpio_pin_10,gpio_pin_reset); //点亮led0
}
else
{
//user handle
hal_gpio_writepin(gpiof,gpio_pin_10,gpio_pin_set); //熄灭led0
}
break;
case event_led1:
currentdatapoint.valueled1 = datapointptr->valueled1;
gizwits_log(evt: event_led1 %d , currentdatapoint.valueled1);
if(0x01 == currentdatapoint.valueled1)
{
//user handle
hal_gpio_writepin(gpiof,gpio_pin_9,gpio_pin_reset); //点亮led1
}
else
{
//user handle
hal_gpio_writepin(gpiof,gpio_pin_9,gpio_pin_set); //灭掉led1
}
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, wifidata->rssi);
break;
case transparent_data:
gizwits_log(transparent_data );
//user handle , fetch data from [data] , size is [len]
break;
case wifi_ntp:
gizwits_log(wifi_ntp : [%d-%d-%d %02d:%02d:%02d][%d] ,ptime->year,ptime->month,ptime->day,ptime->hour,ptime->minute,ptime->second,ptime->ntp);
break;
case module_info:
gizwits_log(module info ...);
#if module_type
gizwits_log(gprs module ...);
//format by gprsinfo_t
#else
gizwits_log(wif module ...);
//format by moduleinfo_t
gizwits_log(moduletype : [%d] ,ptmoduleinfo->moduletype);
#endif
break;
default:
break;
}
}
return 0;
}
4.程序烧录:使用flymcu进行程序烧写, 5.打开app操控体验6.打开xcom查看调试信息
四、注意事项:
1.正确找出开发板的uart2接口:本开发板中对应关系如下:
uart2_tx:pa2,
uart2_rx:pa3,
2.保证与esp8266模块的管脚接线正确:
v3.3(接开发板3.3v);
gnd(接开发板gnd);
tx (接开发板的pa3管脚);
rx (接开发板的pa2管脚);
3.由于本次使用的esp8266是原来机智云二代产品上的,可能正常联上机智云,故没有给esp8266烧写固件,关于固件烧写的内容,请参阅论坛的相关文档。

为什么越来越多的游戏玩家转向AMD中央处理器?
红芯浏览器名不副实!简直就是侮辱大家的智商!
绿驰汽车广阔前景引5G、车联网研发专家助阵
固态继电器电路图分享
车规芯片商琻捷电子获超5亿元投资
从5方面描述STM32F407+ESP8266连接机智云过程
联想S5Pro评测 到底怎么样
小米9S配置曝光 支持5GNSA频段后竖排三摄
高精度温度传感器NST1001满足可穿戴设备市场的体温监测应用需求
盘点谷歌公布的2019最佳应用
全球首款骁龙845手机三星Galaxy S9+真的来了
分析电机以及控制系统中典型EMC干扰源的工作原理
打破世界纪录,谷歌工程师成功将圆周率π计算到小数点后31.4万亿位数字
为什么电流互感器二次可以短路
人工智能研究院主办的2019北京智源大会圆满落幕
基于有限元的PCB板上关键元件热可靠性分析
上汽通用五菱智能移动测温车助力智能检测人群
厦门市翔安区区长李毅一行莅临易华录调研交流
采购y型角座阀产品时需要注意哪些方面
智能工地建设扬尘监测系统让城市远离扬尘污染