機智雲 STM32 ESP8266-01S 簡單無線控燈
1、機智雲賬號注冊和創建新產品
1.1、賬號注冊及其機智雲使用文檔
賬號注冊我就不詳細說了,http://docs.gizwits.com/zh-cn/overview/overview.html機智雲的文檔中心。可以查找自己需要的一部分信息。
1.2、產品創建
選擇入網方式:
查看產品基本信息:
數據點:
數據點要一定要選擇可寫。
1.3、數據讀寫類型區別
讀寫類型:定義數據點的作用范圍,包含有 4 種類型,分別是:只讀、可寫、報警、故障,
以下是官方對讀寫類型的介紹:
① 只讀:表示該數據點為非控制,數據只支持從設備上報。
② 可寫:表示該數據點可控制。設備端可上報數據點數據,雲端/客戶端(移動端)可對該數
據點數據做出下發控制。
③ 報警:表示該數據點非控制,數據只支持從設備(設備端)上報,數據類型需為布爾值。
④ 故障:表示該數據點非控制,數據只支持從設備(設備端)上報,數據類型需為布爾值。
雲端對設備上報的該數據點做統計,可在“運行狀態”查看。
數據類型:定義數據點數據類型,包含有布爾值、枚舉類型、數值、以及擴展,以下是官方對數據類型介紹:
① 布爾值:表示兩個狀態: 0 或 1。如開關狀態等,建議使用布爾數據類型。
② 枚舉類型:可定義一個有限的取值集合。當定義的某個功能(元器件)有固定的若干個值,
例如:“設定 LED 組合顏色”該數據點的枚舉定義值:“自定義,黃色,紫色,粉色”。
③ 數值:填寫數值范圍,數值可為負數/小數,機智雲自動將數值轉換為正數。
④ 擴展:填寫數據長度,數據內容由用戶自定義。對於上述功能點無法滿足的復雜功能可采用,機智雲不建議使用此類型數據,數據上報該數據點的數據,機智雲無法識別。
1.4、MCU開發
Product Secret 在前面基本信息里面可以看到。
下載代碼:
2、可以使用虛擬設備調試
手機app下載地址:
https://download.gizwits.com/zh-cn/p/98/99機智雲官方下載地址。
現在就可以使用手機和虛擬設備進行簡單調試了。
3、esp-01s燒錄機智雲固件
3.1、固件下載
固件下載https://download.gizwits.com/zh-cn/p/92/94直接下載機智雲固件。由於 GAgent 固件會時刻的更新,有可能你們所看到的時間會不一樣,以官網最新發布的為准,你也可以下載舊版本的固件。
解壓后的固件文件:
可以看到固件類型有好幾種類型,標紅那個是我們需要燒錄的固件,我是直接燒錄的已經打包好的固件,我看到網上有人發布的不是打包的固件,燒錄起來麻煩一點。
燒錄軟件下載地址:http://wiki.ai-thinker.com/esp_download
下載解壓就可以看到燒錄軟件:
燒錄了機智雲固件還想要還原樂鑫的固件,附下載地址。
樂鑫固件下載地址:http://wiki.ai-thinker.com/esp8266/sdk
3.2、esp-01s簡介
實物圖:
管腳分布:
3.3、燒錄
3.4、esp與STM32引腳連接
引腳連接:
其它的引腳可以懸空。
4、程序移植MCU
我自己的工程文件:https://download.csdn.net/download/weixin_45488643/12558122
4.1、工程配置
前面已經下載了機智雲程序文件夾,解壓縮可以看到如下文件:
把這2個文件夾拷貝到自己的工程文件下。
我自己使用的是正點的代碼。
在工程文件里面添加文件夾和文件路徑。
選擇C99 Mode 防止編譯報錯。
4.2 代碼移植
工程文件夾目錄:
使用了定時器3和串口3。
4.2.1、修改 USART3 文件
在 usart3.c 文件中添加串口 3 的初始化和中斷服務函數,將中斷接收的數據寫入到gizPutData()函數,代碼如下:
添加頭文件#include “gizwits_product.h” 到USART3文件里面,不添加就會報錯。
4.2.2、修改 timer.c 文件
在定時器 3 中斷服務函數中添加 gizTimerMs()函數,並且添加 gizwits_product.h 頭文件,代碼如下
注意: gizwits_product.h 文件中沒有對 gizTimerMs()函數做聲明,需自己添加,否則編譯會出現警報。
4.2.3、修改 gizwits_product.c 文件
添加完串口發送函數后,回到 gizwitsEventProcess()用戶處理事件函數中添加我們的用戶事件邏輯,這里我們是控制 LED1 的亮滅,在 EVENT_LEDonoff 事件中根據返回的開關量添加其 LED1 的開關控制,代碼如下:需要提前添加自己定義的LED頭文件和usart3.h頭文件,不然就報錯了。
在mcuRestart()函數中添加軟復位函數,代碼如下:
修改**userHandle()**函數:
添加數據上報。
在主函數中,先對按鍵、 LED、串口以及 Gizwits 串口協議所需的定時器、 WIF 串口、數據緩沖區等一系列進行初始化,主循環通過按鍵掃描函數 KEY_Scan 一直掃描當前按鍵狀態,KEY1 按下使 WIFI 設備進入 AirLink 配網模式, KEY_UP 按下讓 WIFI 設備進入復位模式(清除配對信息、斷開連接),而 UserHandl 函數則讀取當前的 LED1 狀態,將讀出狀態值賦予回設備數據結構體變量中,然后再通過 gizwitsHandle 函數上報到服務器。
5、燒錄工程配網
下載工程文件到開發板。
5.1、實物圖
5.2、配網
配網:
先按下開發板上的KEY1鍵在,在點擊我已經完成上述操作。
5.3 、實物效果展示
打開燈:
能看到這個地方的小伙伴也是比較有耐心了,工程文件免費送了。
工程文件免費下載地址:https://wwa.lanzous.com/iVf8re42hvi
整個工程到此就結束了,希望小伙伴能夠手下留情,給個贊。
main.c
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "usart3.h"
#include "gizwits_product.h"
//協議初始化
void Gizwits_Init(void)
{
TIM3_Int_Init(9,7199);//1MS系統定時
usart3_init(9600);//WIFI初始化
userInit();//設備狀態結構體初始化
gizwitsInit();//緩沖區初始化
}
//主函數
int main(void)
{
int key;
delay_init(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
uart_init(115200); //串口初始化為115200
LED_Init(); //LED端口初始化
KEY_Init(); //按鍵初始化
Gizwits_Init(); //協議初始化
printf("--------機智雲-協議移植LED測試實驗----------\r\n");
printf("KEY1:AirLink連接模式\t KEY_UP:復位\r\n\r\n");
while(1)
{
userHandle();//用戶采集
gizwitsHandle((dataPoint_t *)¤tDataPoint);//協議處理
key = KEY_Scan(0);
if(key==KEY1_PRES)//KEY1按鍵
{
printf("WIFI進入AirLink連接模式\r\n");
gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入
}
if(key==WKUP_PRES)//KEY_UP按鍵
{
printf("WIFI復位,請重新配置連接\r\n");
gizwitsSetMode(WIFI_RESET_MODE);//WIFI復位
}
delay_ms(200);
LED0 = ~LED0;
}
}
參考資料