簡介
本案例主要講述了使用GoKit和GC211(4G模塊)來實(shí)現(xiàn)4G網(wǎng)絡(luò)的開發(fā)。囊括模塊接入、設(shè)備控制、數(shù)據(jù)采集、APP開發(fā)等方面內(nèi)容。難度較低,適合新手入門。另外本次內(nèi)容篇幅較長,將分成五部分來連載。主要是以圖文形式呈現(xiàn),如在實(shí)踐過程中有疑問,可以加入機(jī)智云QQ群一起溝通探討。
連載教程內(nèi)容:
gokit2/3 實(shí)現(xiàn) 4G 網(wǎng)絡(luò)模塊 GC211 的接入
STM32作為主控實(shí)現(xiàn)GOKIT全功能控制和采集
Arduino作為主控實(shí)現(xiàn)GOKIT全功能控制和采集
新版本APP快速開發(fā)
網(wǎng)頁控制GOKIT開發(fā)板
進(jìn)入正文
STM32代碼移植編寫
通過這一步驟,我們要了解驅(qū)動(dòng)下載地址、如何移植代碼,如電機(jī)控制、顏色變化、函數(shù)初始化等,移植好代碼后,為后續(xù)的APP應(yīng)用開發(fā)奠定基礎(chǔ)。
1.下載STM32驅(qū)動(dòng)文件。
在機(jī)智云下載中心下載相應(yīng)型號的驅(qū)動(dòng)文件。
本次以STM32為例
2.復(fù)制STM32驅(qū)動(dòng)文件里面的STM32F103C8x.ioc到下載的代碼文件中替換該文件。
3.復(fù)制驅(qū)動(dòng)庫代碼_CubeMX版文件夾里面的驅(qū)動(dòng)文件到下載代碼的Hal文件夾。
4.使用Cubemx,生成Keil代碼
打開下載代碼里面的STM32F103C8x.ioc,需要在電腦上安裝CUBEMX,安裝方法自行百度。打開之后如下圖所示。
個(gè)人建議,任何軟件創(chuàng)建項(xiàng)目,不要包含中文路徑,否則將會導(dǎo)致很多不可控問題,包括此軟件。
5.點(diǎn)擊右上角generate code生成keil代碼。
6.生成代碼之后用keil打開代碼,添加驅(qū)動(dòng)文件到項(xiàng)目
7. gizwits_product.c文件修改
添加相關(guān)的頭文件
gizwitsEventProcess函數(shù)修改,包含各個(gè)傳感器的驅(qū)動(dòng)。
對RGB LED開啟紅色的控制。
if(0x01 == currentDataPoint.valueLED_OnOff)
{
ledRgbControl(254,0, 0);
}
else
{
ledRgbControl(0, 0,0);
}
break;
其他顏色和電機(jī)的修改
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加上關(guān)燈操作。
case WIFI_CON_ROUTER:
ledRgbControl(0, 250, 0);
userInit函數(shù)修改,增加各個(gè)驅(qū)動(dòng)函數(shù)的初始化,數(shù)據(jù)點(diǎn)初始化
memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));
delay_init(72); // 延時(shí) 初始化
rgbLedInit(); // RGB LED 初始化
dht11Init(); // 溫濕度初始化
irInit(); // 紅外初始化
motorInit(); // 電機(jī)初始化
motorStatus(0); // 電機(jī)轉(zhuǎn)速初始化
/** 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ù)的修改,各個(gè)數(shù)據(jù)點(diǎn)的上傳,傳感器采集。
uint8_t ret = 0;
static uint32_t thLastTimer = 0;
///《 新添加代碼: 紅外傳感器數(shù)據(jù)獲取
currentDataPoint.valueInfrared = irHandle();
///《 新添加代碼: 溫濕度傳感器數(shù)據(jù)獲取
if((gizGetTimerCount()- thLastTimer) 》 2000) //上報(bào)間隔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下面的各個(gè)sensor驅(qū)動(dòng)之中,否則sensor將會提示沒有引腳定義報(bào)錯(cuò)。
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時(shí)的LED點(diǎn)亮代碼。
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文件。魔術(shù)棒→user→$KARMARMCCinfromelf.exe --bin --output=@L.bin !L
11.編譯項(xiàng)目
12.燒錄
STM32開發(fā)板集成串口下載,打開串口燒錄軟件mcuisp.exe,附件中可下載。
選擇開發(fā)板串口
將如圖所示開關(guān)拔到system
選擇生成的固件文件
點(diǎn)擊開始編程
燒錄完成。
燒錄完成之后將開關(guān)拔回flash,復(fù)位模組,就可以正常運(yùn)行程序。
13.檢驗(yàn)燒錄是否成功
打開 串口調(diào)試助手.exe ,附件中可以下載。監(jiān)聽串口出現(xiàn)如下圖所示日志代表程序燒錄成功。
14.驗(yàn)證設(shè)備和云端是否互聯(lián)互通
接上功能板和4G模組(插上普通4G卡)。云端設(shè)備上線。
15.打開機(jī)智云串口調(diào)試助手.exe,附件中或者官網(wǎng)下載中心可以下載。工具,二設(shè)備二維碼,按照如圖生成二維碼。
16.下載機(jī)智云APP,驗(yàn)證智能設(shè)備和APP是否互聯(lián)互通。
使用機(jī)智云App掃碼即可綁定設(shè)備,官網(wǎng)下載中心可以下載APP
到此STM32移植完成。
基本上硬件部分全部完成,接下來,我要做APP了。當(dāng)然在這之前,我也會把Arduino版本的如何進(jìn)行移植,告知大家。
原文標(biāo)題:【4G 開發(fā)】基于GOKIT+GC211的開發(fā)指南2,STM32代碼移植
文章出處:【微信公眾號:機(jī)智云開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
4G
+關(guān)注
關(guān)注
15文章
5454瀏覽量
118321 -
STM32
+關(guān)注
關(guān)注
2258文章
10828瀏覽量
352542
原文標(biāo)題:【4G 開發(fā)】基于GOKIT+GC211的開發(fā)指南2,STM32代碼移植
文章出處:【微信號:IoTMaker,微信公眾號:機(jī)智云開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論