简介
本案例主要讲述了使用GoKit和GC211(4G模块)来实现4G网络的开发。囊括模块接入、设备控制、数据采集、APP开发等方面内容。难度较低,适合新手入门。另外本次内容篇幅较长,将分成五部分来连载。主要是以图文形式呈现,如在实践过程中有疑问,可以加入机智云QQ群一起沟通探讨。
连载教程内容:
gokit2/3 实现 4G 网络模块 GC211 的接入
STM32作为主控实现GOKIT全功能控制和采集
Arduino作为主控实现GOKIT全功能控制和采集
新版本APP快速开发
网页控制GOKIT开发板
进入正文
STM32代码移植编写
通过这一步骤,我们要了解驱动下载地址、如何移植代码,如电机控制、颜色变化、函数初始化等,移植好代码后,为后续的APP应用开发奠定基础。
1.下载STM32驱动文件。
在机智云下载中心下载相应型号的驱动文件。
本次以STM32为例
2.复制STM32驱动文件里面的STM32F103C8x.ioc到下载的代码文件中替换该文件。
3.复制驱动库代码_CubeMX版文件夹里面的驱动文件到下载代码的Hal文件夹。
4.使用Cubemx,生成Keil代码
打开下载代码里面的STM32F103C8x.ioc,需要在电脑上安装CUBEMX,安装方法自行百度。打开之后如下图所示。
个人建议,任何软件创建项目,不要包含中文路径,否则将会导致很多不可控问题,包括此软件。
5.点击右上角generate code生成keil代码。
6.生成代码之后用keil打开代码,添加驱动文件到项目
7. gizwits_product.c文件修改
添加相关的头文件
gizwitsEventProcess函数修改,包含各个传感器的驱动。
对RGB LED开启红色的控制。
if(0x01 == currentDataPoint.valueLED_OnOff)
{
ledRgbControl(254,0, 0);
}
else
{
ledRgbControl(0, 0,0);
}
break;
其他颜色和电机的修改
case EVENT_LED_Color:
currentDataPoint.valueLED_Color = dataPointPtr-》valueLED_Color;
GIZWITS_LOG(“Evt: EVENT_LED_Color %d ”, currentDataPoint.valueLED_Color);
switch(currentDataPoint.valueLED_Color)
{
case LED_Color_VALUE0:
ledRgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
break;
case LED_Color_VALUE1:
ledRgbControl(254, 254, 0);
break;
case LED_Color_VALUE2:
ledRgbControl(254,0, 70);
break;
case LED_Color_VALUE3:
ledRgbControl(238,30, 30);
break;
default:
break;
}
break;
case EVENT_LED_R:
currentDataPoint.valueLED_R = dataPointPtr-》valueLED_R;
GIZWITS_LOG(“Evt:EVENT_LED_R %d ”,currentDataPoint.valueLED_R);
ledRgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
break;
case EVENT_LED_G:
currentDataPoint.valueLED_G = dataPointPtr-》valueLED_G;
GIZWITS_LOG(“Evt:EVENT_LED_G %d ”,currentDataPoint.valueLED_G);
ledRgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
break;
case EVENT_LED_B:
currentDataPoint.valueLED_B = dataPointPtr-》valueLED_B;
GIZWITS_LOG(“Evt:EVENT_LED_B %d ”,currentDataPoint.valueLED_B);
ledRgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
break;
case EVENT_Motor_Speed:
currentDataPoint.valueMotor_Speed = dataPointPtr-》valueMotor_Speed;
GIZWITS_LOG(“Evt:EVENT_Motor_Speed %d ”,currentDataPoint.valueMotor_Speed);
motorStatus(currentDataPoint.valueMotor_Speed);
break;
如使用wifi方案,在WIFI_CON_ROUTER加上关灯操作。
case WIFI_CON_ROUTER:
ledRgbControl(0, 250, 0);
userInit函数修改,增加各个驱动函数的初始化,数据点初始化
memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));
delay_init(72); // 延时 初始化
rgbLedInit(); // RGB LED 初始化
dht11Init(); // 温湿度初始化
irInit(); // 红外初始化
motorInit(); // 电机初始化
motorStatus(0); // 电机转速初始化
/** Warning !!! DataPoint Variables Init , Must Within The Data Range **/
currentDataPoint.valueLED_OnOff = 0;
currentDataPoint.valueInfrared = 0;
currentDataPoint.valueAlert_1 = 0;
currentDataPoint.valueAlert_2 = 0;
currentDataPoint.valueFault_LED = 0;
currentDataPoint.valueFault_Motor = 0;
currentDataPoint.valueFault_TemHum = 0;
currentDataPoint.valueFault_IR = 0;
currentDataPoint.valueLED_Color = 0;
currentDataPoint.valueLED_R = 0;
currentDataPoint.valueLED_G = 0;
currentDataPoint.valueLED_B = 0;
currentDataPoint.valueMotor_Speed = 0;
currentDataPoint.valueTemperature = 0;
currentDataPoint.valueHumidity = 0;
userHandle函数的修改,各个数据点的上传,传感器采集。
uint8_t ret = 0;
static uint32_t thLastTimer = 0;
///《 新添加代码: 红外传感器数据获取
currentDataPoint.valueInfrared = irHandle();
///《 新添加代码: 温湿度传感器数据获取
if((gizGetTimerCount()- thLastTimer) 》 2000) //上报间隔2S
{
ret = dht11Read((uint8_t *)¤tDataPoint.valueTemperature,(uint8_t*)¤tDataPoint.valueHumidity);
if(ret != 0)
{
GIZWITS_LOG(“Failedto read DHT11 [%d] ”, ret);
}
thLastTimer = gizGetTimerCount();
}
8.将#include “main.h” 添加到hal下面的各个sensor驱动之中,否则sensor将会提示没有引脚定义报错。
9. main.c修改,增加头文件
#include “hal_temp_hum.h”
#include “hal_rgb_led.h”
#include “hal_motor.h”
#include “Hal_infrared.h”
#include “delay.h”
main.c 文件的 key2ShortPress( ) 函数与 key2LongPress( ) 函数中添
加长/短按key2时的LED点亮代码。
void key2ShortPress(void)
{
GIZWITS_LOG(“KEY2 PRESS ,Soft APmode ”);
#if !MODULE_TYPE
gizwitsSetMode(WIFI_SOFTAP_MODE);
#endif
//Soft AP mode,RGB 红灯
ledRgbControl(250,0, 0);
}
void key2LongPress(void)
{
//AirLink mode
GIZWITS_LOG(“KEY2PRESS LONG ,AirLink mode ”);
#if !MODULE_TYPE
gizwitsSetMode(WIFI_AIRLINK_MODE);
#endif
//AirLink mode,RGB 绿灯
ledRgbControl(0,250, 0);
},
10.生成bin文件。魔术棒→user→$KARMARMCCinfromelf.exe --bin --output=@L.bin !L
11.编译项目
12.烧录
STM32开发板集成串口下载,打开串口烧录软件mcuisp.exe,附件中可下载。
选择开发板串口
将如图所示开关拔到system
选择生成的固件文件
点击开始编程
烧录完成。
烧录完成之后将开关拔回flash,复位模组,就可以正常运行程序。
13.检验烧录是否成功
打开 串口调试助手.exe ,附件中可以下载。监听串口出现如下图所示日志代表程序烧录成功。
14.验证设备和云端是否互联互通
接上功能板和4G模组(插上普通4G卡)。云端设备上线。
15.打开机智云串口调试助手.exe,附件中或者官网下载中心可以下载。工具,二设备二维码,按照如图生成二维码。
16.下载机智云APP,验证智能设备和APP是否互联互通。
使用机智云App扫码即可绑定设备,官网下载中心可以下载APP
到此STM32移植完成。