簡介
本案例主要講述了使用GoKit和GC211(4G模塊)來實現(xiàn)4G網絡的開發(fā)。囊括模塊接入、設備控制、數(shù)據采集、APP開發(fā)等方面內容。難度較低,適合新手入門。另外本次內容篇幅較長,將分成五部分來連載。主要是以圖文形式呈現(xiàn),如在實踐過程中有疑問,可以加入機智云QQ群一起溝通探討。
連載教程內容:
gokit2/3 實現(xiàn) 4G 網絡模塊 GC211 的接入
STM32作為主控實現(xiàn)GOKIT全功能控制和采集
Arduino作為主控實現(xiàn)GOKIT全功能控制和采集
新版本APP快速開發(fā)
網頁控制GOKIT開發(fā)板
進入正文
STM32代碼移植編寫
通過這一步驟,我們要了解驅動下載地址、如何移植代碼,如電機控制、顏色變化、函數(shù)初始化等,移植好代碼后,為后續(xù)的APP應用開發(fā)奠定基礎。
1.下載STM32驅動文件。
在機智云下載中心下載相應型號的驅動文件。
本次以STM32為例
2.復制STM32驅動文件里面的STM32F103C8x.ioc到下載的代碼文件中替換該文件。
3.復制驅動庫代碼_CubeMX版文件夾里面的驅動文件到下載代碼的Hal文件夾。
4.使用Cubemx,生成Keil代碼
打開下載代碼里面的STM32F103C8x.ioc,需要在電腦上安裝CUBEMX,安裝方法自行百度。打開之后如下圖所示。
個人建議,任何軟件創(chuàng)建項目,不要包含中文路徑,否則將會導致很多不可控問題,包括此軟件。
5.點擊右上角generate code生成keil代碼。
6.生成代碼之后用keil打開代碼,添加驅動文件到項目
7. gizwits_product.c文件修改
添加相關的頭文件
gizwitsEventProcess函數(shù)修改,包含各個傳感器的驅動。
對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函數(shù)修改,增加各個驅動函數(shù)的初始化,數(shù)據點初始化
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函數(shù)的修改,各個數(shù)據點的上傳,傳感器采集。
uint8_t ret = 0;
static uint32_t thLastTimer = 0;
///《 新添加代碼: 紅外傳感器數(shù)據獲取
currentDataPoint.valueInfrared = irHandle();
///《 新添加代碼: 溫濕度傳感器數(shù)據獲取
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( ) 函數(shù)與 key2LongPress( ) 函數(shù)中添
加長/短按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開發(fā)板集成串口下載,打開串口燒錄軟件mcuisp.exe,附件中可下載。
選擇開發(fā)板串口
將如圖所示開關拔到system
選擇生成的固件文件
點擊開始編程
燒錄完成。
燒錄完成之后將開關拔回flash,復位模組,就可以正常運行程序。
13.檢驗燒錄是否成功
打開 串口調試助手.exe ,附件中可以下載。監(jiān)聽串口出現(xiàn)如下圖所示日志代表程序燒錄成功。
14.驗證設備和云端是否互聯(lián)互通
接上功能板和4G模組(插上普通4G卡)。云端設備上線。
15.打開機智云串口調試助手.exe,附件中或者官網下載中心可以下載。工具,二設備二維碼,按照如圖生成二維碼。
16.下載機智云APP,驗證智能設備和APP是否互聯(lián)互通。
使用機智云App掃碼即可綁定設備,官網下載中心可以下載APP
到此STM32移植完成。
基本上硬件部分全部完成,接下來,我要做APP了。當然在這之前,我也會把Arduino版本的如何進行移植,告知大家。
原文標題:【4G 開發(fā)】基于GOKIT+GC211的開發(fā)指南2,STM32代碼移植
文章出處:【微信公眾號:機智云開發(fā)者】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
4G
+關注
關注
15文章
5530瀏覽量
119386 -
STM32
+關注
關注
2271文章
10923瀏覽量
357105
原文標題:【4G 開發(fā)】基于GOKIT+GC211的開發(fā)指南2,STM32代碼移植
文章出處:【微信號:IoTMaker,微信公眾號:機智云開發(fā)者】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論