嵌入式技术项目教程-基于STM32F4CubeMX与HAL库 课件 6.2.8 任务实施_第1页
嵌入式技术项目教程-基于STM32F4CubeMX与HAL库 课件 6.2.8 任务实施_第2页
嵌入式技术项目教程-基于STM32F4CubeMX与HAL库 课件 6.2.8 任务实施_第3页
嵌入式技术项目教程-基于STM32F4CubeMX与HAL库 课件 6.2.8 任务实施_第4页
嵌入式技术项目教程-基于STM32F4CubeMX与HAL库 课件 6.2.8 任务实施_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

删除Page473~493页内容,即6.2.8节内容,用下文替换。6.2.8任务实施任务实施前必须准备好如表6-21所示的设备和资源。表6-21设备清单表序号设备/资源名称数量是否准备到位(√)1STM32F407ZET6最小核心板1

2USB转串口数据线1

3ESP8266模块1

4OneNET账号1

5DHT11模块1

6OneNET的Token计算器17时间戳转换工具18例程驱动代码(包含ESP01S.c、ESP01S.h、DHT11.c、DHT11.h、MQTT.c、MQTT.h、OneNET.c、OneNET.h、cJSON.c和cJSON.h)1

要完成本任务,实施步骤分成以下几步。搭建硬件平台。创建OneNET云平台产品。创建CubeMX基础工程。添加代码。编译链接下载验证。具体实施步骤如下。搭建硬件平台ESP8266模块与STM32F407核心板的接口ESP8266模块与STM32F407核心板的连线按表6-22连接。表6-22ESP8266与STM32F407核心板接线表ESP8266模块引脚名称STM32F407ZET6引脚备注VCCVCC电源正(3.3~5v)GNDGND电源地TXDPB11串口3的RX端RXDPB10串口3的TX端RSTPF6IO0/不连接DHT11模块与STM32F407核心板的接口DHT11模块的数据输出端Dat接STM32F407核心板的PG9,模块的VCC及GND分别接核心板的VCC(3.3V)和GND。LED指示灯与STM32F407核心板的连接两只指示灯LED0、LED1分别连接STM32F407核心板的PF9及PF10,低电平点亮,高电平熄灭。创建OneNET云平台产品注册OneNET账号并完成实名认证在OneNET官网(/)上注册一个账号,并完成实名认证。具体的注册过程请参考官网提供的指引。进入OneNET物联网控制台登录OneNET官网,点击开发者中心。移动鼠标放置在“全部产品服务”,单击“基础服务”之下的“物联网开放平台”。界面如图6-24所示。图6-24创建产品选择产品品类在图6-24中,单击“创建产品”,进入产品列表页面,如图6-25所示。图6-25选择产品品类1点击「选择产品类型」,打开选择产品类型弹窗。根据行业->场景->品类三级结构,选择您的设备所属的产品类型。这里选择产品行业为“智慧生活”、场景选“家居安防”、品类选“温湿度传感器”。如图6-26所示。图6-26选择产品品类2选择智能化接入方式在创建产品时,您可以选择设备接入和产品智能化两种,我们选设备接入。填写信息产品基本信息的填写可以描述产品和确认产品的通信类型。具体以实际的页面提示为准。本任务中,填写示例如图6-27所示。添加设备展开菜单栏中的「设备接入与管理」,点击「设备管理」,进入设备列表页面。点击「添加设备」,选中单个设备(默认方式),选择具体产品,完善设备基础信息,点击「确定」创建设备。我们在产品“my_weather”下添加设备名称为“my_dht11”。如图6-28所示界面。单击OneNET平台左侧的“产品开发”,显示刚刚添加的设备如图6-29所示。单击图6-29右侧“产品开发”进入如图6-30所示。“设置物模型”单击图6-30右侧的“设置物模型”,在弹出的窗体中选“自定义功能点”。添加温度测量按图6-31(a)所示设置温度功能相关参数. 添加“湿度”测量图6-27填写产品信息图6-28添加设备图6-29进入产品开发界面图6-30进入产品开发界面2(a)图(b)图图6-31设置物模型,添加温湿度测试按图6-31(b)所示设置湿度功能相关参数。添加两只LED灯添加结果如图6-32所示,单击“保存”。图6-32添加LED灯物模型创建完成后的界面如图6-33所示。注意:温度值、LED0灯、LED1灯、湿度值这四个功能其标识符“temp”“led0”“led1”“humi”要和STM32程序onenet.c中的标识符保持一致。至此,在OneNET平台上就创建好这款产品了,“my_Weather”产品创建完成界面如图6-34所示。图6-33物模型创建完成界面 图6-34OneNET云平台“my_Weather”产品创建完成界面单击图6-34中“accessKey”查看,在弹出的对话框中单击“获取验证码”,在手机端得到验证码,在对话框中输入验证码,单击“确定”。如图6-35所示,获得验证码后的界面如图6-36所示。图6-35查看产品AccessKey验证码图6-36获得AccessKey后的产品界面下面介绍三个重要参数和下位机编程有关。①设备名称②产品ID③accesskey。根据设备ID(设备名称)、access_key及到期时间戳,使用token计算器生成token加密密码。Token生成工具为便于开发者开发,OneNET提供Token生成工具,其运行界面如图6-36所示。下载打开token生成工具token.exe,填写对应参数,res字段填写products/{产品id}/devices/{设备名},key填写access_key,et填写到期时间戳,其余不变。图6-36OneNET-token计算工具到期时间戳的计算用时间戳转换工具转换,如图6-37所示。也可使用在线时间戳转换工具进行转换。图6-37时间戳转换工具1.0以本任务为例,计算产品token的步骤如图6-38所示。图6-38OneNET-token计算器相关参数填写单击token计算器中“generate”生成后面程序中要用到的“AUTH_INFO”。在STM32的Onenet.c程序中。图6-39OneNET-token计算器生成鉴权码(程序onenet.c中用到的AUTH_INFO)Onenet.c中相关代码如下。//产品ID#definePROID "6iCSlnEWPX"//鉴权信息由token计算器计算得到#defineAUTH_INFO"version=2018-10-31&res=products%2F6iCSlnEWPX%2Fdevices%2Fmy_dht11&et=1924790400&method=md5&sign=jgDK3hJzN83EpiKvWQyrSw%3D%3D"//设备名称(设备ID)#defineDEVID "my_dht11"设备属性上报请求发布的格式为:$sys/{pid}/{device-name}/thing/property/post。在MQTT.c文件中,要修改这句。即#definestr"$sys/产品ID/设备ID/thing/property/post",将产品ID改成系统生成的“6iCSlnEWPX”,设备ID改成“my_dht11”。MQTT.c中相关代码如下。#defineCMD_TOPIC_PREFIX "$creq"//#definestr"$sys/产品ID/设备ID/thing/property/post"//本任务中产品ID6iCSlnEWPX,设备IDmy_dht11#definestr"$sys/6iCSlnEWPX/my_dht11/thing/property/post"创建CubeMX基础工程参见之前的任务创建CubeMX基础工程。引脚分配本任务中的引脚分配主要是PF9(LED0)、PF10(LED1)、PG9(DHT11dat)、PF6(ESP8266RST)的功能选择:选PF9、PF10和PG9的功能为“GPIO_Output”,PF6的功能为“GPIO_Output”,具体的配置可参考前述章节的介绍。配置结果如图6-40所示。图6-40引脚分配外设配置本任务的外设配置主要是串口1、串口3。串口1、串口3均采用中断方式,波特率为115200bps,其余参数不变,具体的配置方法可参考前述章节的介绍。系统配置、时钟配置、调试方式配置均同之前的任务配置,生成基础工程。添加代码包在MDK-ARM文件夹同级目录新建文件夹“NET”,将代码包提供的cJSON.h、cJSON.c、DHT11.h、DHT11.c、esp01s.h、esp01s.c、LED.h、LED.c、MQTT.h、MQTT.c、Onenet.h、Onenet.c文件复制到该文件夹下。在KeilMDK工程中建立“NET”组,将NET文件夹下的所有的.c文件加入组中。最后将NET文件夹加入头文件“IncludePaths(包含路径)”中,以便编译时可以访问相应的文件。编写应用层代码main.c#include"gpio.h"/*Privateincludes*//*USERCODEBEGINIncludes*/#include"DHT11.h"#include"esp01s.h"#include"Onenet.h"#include"MQTT.h"#include"led.h"/*USERCODEENDIncludes*//*Privatevariables*//*USERCODEBEGINPV*/externuint8_taRxBuffer; unsignedshorttimeCount=0; //发送间隔变量unsignedchar*dataPtr=NULL;/*USERCODEENDPV*/intmain(void){HAL_Init();SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); MX_USART3_UART_Init();/*USERCODEBEGIN2*/UsartPrintf(USART_DEBUG,"TheUSART1isOK!\r\n");HAL_UART_Receive_IT(&huart3,(uint8_t*)&aRxBuffer,1);//串口3接收中断初始化ESP01S_Init();//8266初始化while(OneNet_DevLink())//接入onenetESP01S_Clear();//UsartPrintf(USART_DEBUG,"InitisOK!\r\n"); OneNET_Subscribe(); Led_init();Led0_off(); Led1_off(); /*USERCODEEND2*//*USERCODEBEGINWHILE*/while(1){/*USERCODEBEGIN3*/ if(++timeCount>=200)//上传数据约2s一次 {DHT11();UsartPrintf(USART_DEBUG,"OneNet_SendData\r\n");OneNet_SendData(); timeCount=0; ESP01S_Clear(); }dataPtr=ESP01S_GetIPD(3);//完成需要15个毫秒,三次循环,一次5个毫秒 if(dataPtr!=NULL) OneNet_RevPro(dataPtr);HAL_Delay(10);}/*USERCODEEND3*/}打开usart.c,在对应位置添加如下代码:/*USERCODEBEGIN0*/voidUsartPrintf(UART_HandleTypeDefUSARTx,char*fmt,...){ unsignedcharUsartPrintfBuf[296]; va_listap; unsignedchar*pStr=UsartPrintfBuf; va_start(ap,fmt); vsnprintf((char*)UsartPrintfBuf,sizeof(UsartPrintfBuf),fmt,ap); va_end(ap); while(*pStr!=NULL) {HAL_UART_Transmit(&USARTx,(uint8_t*)pStr++,1,HAL_MAX_DELAY); }}/*USERCODEEND0*//*USERCODEBEGIN1*/voidUsart_SendString(UART_HandleTypeDefUSARTx,unsignedchar*str,unsignedshortlen){ unsignedshortcount=0; for(;count<len;count++) { HAL_UART_Transmit(&USARTx,(uint8_t*)str++,1,HAL_MAX_DELAY); }}/*USERCODEEND1*/打开uart.h文件,在适当位置添加如下的函数声明。#ifdef__cplusplusextern"C"{#endif/*USERCODEBEGINPrivatedefines*/#defineUSART_DEBUG huart1/*USERCODEENDPrivatedefines*//*USERCODEBEGINPrototypes*/voidUsartPrintf(UART_HandleTypeDefUSARTx,char*fmt,...);voidUsart_SendString(UART_HandleTypeDefUSARTx,unsignedchar*str,unsignedshortlen);/*USERCODEENDPrototypes*/打开esp01s.c文件,修改Wi-Fi参数配置语句。根据读者自己手机开的Wi-Fi热点名称和密码(或者家里的无线路由名称及密码)来修改esp01s.c中的相关代码。//无线接入点名称(或热点名称)、密码#defineESP01S_WIFI_INFO "AT+CWJAP=\"nova7\",\"12345678\"\r\n"//要修改这一行#defineESP01S_ONENET_INFO "AT+CIPSTART=\"TCP\",\"\",1883\r\n"打开MQTT.c文件,修改参数配置。根据图6-38生成的产品ID、设备名称,将本任务中产品ID改成系统生成的“6iCSlnEWPX”,设备ID改成“my_dht11”。读者需要根据自己创建的产品ID和设备名称修改。MQTT.c中相关代码如下。#defineCMD_TOPIC_PREFIX "$creq"//#definestr"$sys/产品ID/设备ID/thing/property/post"//本任务中产品ID6iCSlnEWPX设备IDmy_dht11#definestr"$sys/6iCSlnEWPX/my_dht11/thing/property/post" 打开Onenet.c文件,修改相关参数。根据图6-39Token计算器生成的密码修改如下语句。//产品ID#definePROID "6iCSlnEWPX"//鉴权信息由token计算器计算得到#defineAUTH_INFO"version=2018-10-31&res=products%2F6iCSlnEWPX%2Fdevices%2Fmy_dht11&et=1924790400&method=md5&sign=jgDK3hJzN83EpiKvWQyrSw%3D%3D"//设备名称(设备ID)#defineDEVID "my_dht11"根据图6-33建立物模型中的标识符,修改如下代码。Onenet.c中,相关的函数代码如下。unsignedcharOneNet_FillBuf(char*buf){ chartext[48]; floatTemp;floatHumidity; memset(text,0,sizeof(text));//数据格式:{"id":"123","version":"1.0","params":{"humi":{"value":%d},"temp":{"value":%d}}} strcpy(buf,"{\"id\":\"123\",\"params\":{"); Temp=data[2]+(float)data[3]/10;//温度Humidity=data[0]+(float)data[1]/10;//湿度 memset(text,0,sizeof(text));sprintf(text,"\"temp\":{\"value\":%.1f},",Temp); /*此处的temp要和平台上的标识符保持一致,数据类型也要保持一致*/ strcat(buf,text); //LED信息上传LED0_FLAG=HAL_GPIO_ReadPin(LED0_GPIO_Port,LED0_Pin);//读取LED灯的状态LED1_FLAG=HAL_GPIO_ReadPin(LED1_GPIO_Port,LED1_Pin); memset(text,0,sizeof(text));//此处要清除text缓存,才能填写下一个参数 sprintf(text,"\"humi\":{\"value\":%.1f},",Humidity); /*此处的humi要和平台上的表示符保持一致,数据类型也要保持一致*/ strcat(buf,text); memset(text,0,sizeof(text)); sprintf(text,"\"led0\":{\"value\":\"%s\"},",LED0_FLAG?"OFF":"ON");/*此处的l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论