当然啦,如果是自己的设备,这里就需要自行编写驱动文件。
3.修改代码
首先是初始化外设,在 Gizwits 目录下的gizwits_product.c 文件中userInit()函数中。
修改前:
- void userInit(void)
- {
- memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));
- /** Warning !!! DataPoint Variables Init , Must Within The Data Range **/
- currentDataPoint.valueLED_OnOff = ;
- */
- }
[color=rgb(51, 102, 153) !important]复制代码
修改后:
- void userInit(void)
- {
- memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));
- delay_init(72); // 延时 初始化
- rgbLedInit(); // RGB LED 初始化
- /** Warning !!! DataPoint Variables Init , Must Within The Data Range **/
- currentDataPoint.valueLED_OnOff = 0;
- }
[color=rgb(51, 102, 153) !important]复制代码
在 Gizwits 目录下的gizwits_product.c 文件中的gizwitsEventProcess()函数中处理相应事件即可(如下例中的 ledRgbControl(),功能是控制 RGB 灯的颜色) 。
下面以控制 RGB LED 为例, 代码示例如下:
修改前:
- IF(0x01 == currentDataPoint.valueLED_ONOFF)
- {
- //user handle
- }
- else
- {
- //user handle
- }
- break;
[color=rgb(51, 102, 153) !important]复制代码
修改后:
- if(0x01 == currentDataPoint.valueLED_ONOFF)
- {
- //user handle
- ledRgbControl(0,254,0);
- }
- else
- {
- //user handle
- ledRgbControl(0,0,0);
- }
- break;
[color=rgb(51, 102, 153) !important]复制代码
如果有其他的传感器设备,首先要完成的是传感器驱动开发,然后在 user 目录下gizwits_product.c文件中的 userHandle()函数中实现传感器数据采集,用户只需并将采集到的数值赋值给对应用户区的设备状态结构体数据位即可。
修改前:
- void userHandle(void)
- {
- /*
- */
- }
[color=rgb(51, 102, 153) !important]复制代码
修改后:
- void userHandle(void)
- {
- uint8_t ret = 0;
- static uint32_t thLastTimer = 0;
- ///< 新添加代码: 温湿度传感器数据获取
- 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();
- }
- }
[color=rgb(51, 102, 153) !important]复制代码
值得注意的是,关于驱动的头文件需要包含到gizwits_product.c中,请根据实际情况添加。
最后在main.h中添加相应的GPIO定义。
- #define RGB_LED_EN_Pin GPIO_PIN_0
- #define RGB_LED_EN_GPIO_Port GPIOA
- #define RGBLED_CLK_Pin GPIO_PIN_8
- #define RGBLED_CLK_GPIO_Port GPIOB
- #define RGBLED_DIN_Pin GPIO_PIN_9
- #define RGBLED_DIN_GPIO_Port GPIOB
[color=rgb(51, 102, 153) !important]复制代码
当然啦,为了方便联网,需要在main.c 文件的 key2ShortPress() 函数与 key2LongPress( ) 函数中添加点亮LED代码。
- void key2ShortPress(void)
- {
- GIZWITS_LOG("KEY2 PRESS ,Soft AP mode
"); - #if !MODULE_TYPE
- gizwitsSetMode(WIFI_SOFTAP_MODE);
- #endif
- ledRgbControl(250,0, 0);
- }
- void key2LongPress(void)
- {
- //AirLink mode
- GIZWITS_LOG("KEY2 PRESS LONG ,AirLink mode
"); - #if !MODULE_TYPE
- gizwitsSetMode(WIFI_AIRLINK_MODE);
- #endif
- ledRgbControl(0, 250, 0);
- }
[color=rgb(51, 102, 153) !important]复制代码
最后编译下载固件即可,笔者使用的是ST-link下载。
当然也可使用串口下载,在下载前,需要准备好固件。
在Keil中,需要勾选输出HEX文件,然后编译即可。
接下来就是使用串口下载固件,方法如下。
将底板的开关拔到system。
打开串口烧录软件mcuisp.exe。点击‘开始编程’。
等待下载完成即可。
值得注意的是,不同的
开发板,串口下载操作不同,请根据实际情况操作,笔者这里使用的是GoKit3。
烧录完成之后将开关拔回flash,复位模组,就可以正常运行程序。
1.4.3设备连接这里还是用GoKit3硬件平台,但是需要取下WiFi模组,连接4G设备,笔者这里使用的官网的转接板。
如果没有转接板,则需要按照下图方式连接。
注意:4G模块启动的电流较大,需要外接
电源,同时接上4G天线。
然后打开‘机智云串口调试助手.exe’。
填写相应的Product Key以及IMEI即可。
机智云串口调试助手:https://download.gizwits.com/zh-cn/p/98/119
打开云端,即可看到设备已经在线。
然后打开移动应用,进行设备连接。
接下来就可以控制LED了。
接下来就可以尽情的玩耍了。