流程圖:
基礎邏輯功能的實現
Aht10測溫模塊:
采用例程中的aht10模塊代碼(aht10軟件包已配置好無需再配),并以此為“根據地”,將后續(xù)其他功能加入到此main.c的工程文件中。
調用函數讀取當前的溫度值,并根據溫度區(qū)間(<30,30-32,>32)給控制參數crl賦值(0,1,2),以備后續(xù)使用。
Led_matrix矩陣燈模塊
枚舉每個燈的名稱,并對應地將Setcolor的函數加入不同溫度區(qū)間的情況中去,即對crl使用switch語句,case0給矩陣燈賦綠色,1賦藍色,2賦紅色。
過程中要注意矩陣燈的驅動文件夾是否使能且參與編譯。
蜂鳴器模塊
將蜂鳴器的端口設置為輸出模式后,對應地加入switch語句中,即0、1時beep_off,
2時調用beep_on。
Lcd顯示屏模塊
對lcd初始化后,對應不同的情況調用顯示函數,分別顯示rt-thread的logo,調用字符串顯示函數顯示實時溫度和對應的工作狀態(tài)(0,1為SAFE,2顯示TEMPERATURE IS TOO HIGH!!!)。
過程中要注意lcd驅動文件夾是否使能且參與編譯。
且要主要lcd的配置與led矩陣燈是否有沖突。
舵機
為了更加形象的模擬系統溫度過高后的冷卻功能,我們在板子上增加一個舵機外設,通過定時器輸出pw波,控制舵機在aht10檢測到溫度過高時轉動吹風來降溫。為了不影響板載外設的正常功能,我們打開Stm32CubeMX,尋找空閑引腳PE5,配置成Tim9——CH1輸出。
接著,對Timer進行相關配置。
配置完成后生成代碼,刪除掉不需要的文件夾。
點擊rt setting,打開時鐘和PWM驅動程序
系統設置完成后,開始編寫代碼。
窗體底端
為了觀察PE5輸出的PWM波形,使用邏輯分析儀連接相關引腳后,打開Pulse view軟件,觀測到波形如下
與代碼設置的理想波形幾乎一致,因此可以確定,PWM波設置完成。
接著查閱資料,了解到給360度舵機一個PWM信號,舵機會以一個特定的速度轉動,類似與電機。但與電機不同的是,360舵機是閉環(huán)控制,速度控制穩(wěn)定。設置PWM周期為20ms,高電平為0.5ms時,占空比符合正向最大速度轉動的要求。對代碼重新進行設置后,連接舵機,發(fā)現舵機正轉,符合要求。至此舵機模塊配置完成。
按鍵控制舵機功能
本次實訓中,為了完善功能,使我們的儀器更為可靠,我們創(chuàng)新性地加入了當溫度未達到警戒值(32℃)時,也能通過手動調節(jié)的方式使舵機轉動強制降溫的功能。
對key1鍵進行分配(四個按鍵中最上方的按鍵),當此按鍵未pin_up狀態(tài)時,強行調用mg90main函數(舵機啟動函數),對一些溫度傳感器檢測不到的故障進行強制降溫,確保器件不被燒壞。
void irq_callback(void *args)
{
rt_uint32_t sign = (rt_uint32_t) args;
switch (sign)
{
case PIN_WK_UP :
flag=1;
break;
case PIN_KEY1 :
flag=0;
break;
default:
LOG_E("error sign= %d !", sign);
break;
}
}
void self_sg90()
{
switch (flag)
{
case 1 :
mg90main1();
break;
case 0 :
if(temperature<30)
{
mg90mainstop();
}
break;
default:
LOG_E("error flag= %d !", flag);
break;
}}
Onenet物聯網傳輸數據
Abstract:該開發(fā)板基于RW007 WiFi模塊的在RT-Thread studio進行開發(fā),在聯網之后,再連接到ONENet,即可將本地傳感器信息上傳至云端
一、代碼軟件包的設計與使用
(1)WiFi聯網(下載rw007安裝包),
該軟件包使用rw007是通過SPI協議進行傳輸,所以在配置項中要使能SPI,并在SPI項目下配置引腳
(2)通過MQTT協議連接onenet(下載onenet軟件包)
基于Mqtt協議,軟件包中通過板載publish topic,代碼如下:
該函數在我們串口中初始化onenet時即調用
(3)數據上傳
使用板載示例程序中的函數將注冊周期上傳任務到 MSH,并通過終端指令調用該函數,將數據publish到物聯網中對應話題當中
static void onenet_upload_entry(void *parameter)
{
int value = 0;
while (1)
{
value = rand() % 100;
if (onenet_mqtt_upload_digit("temperature", value) < 0)
{
LOG_E("upload has an error, stop uploading");
break;
}
else
{
LOG_D("buffer : {"temperature":%d}", value);
}
rt_thread_delay(rt_tick_from_millisecond(5 * 1000));
}
}
int onenet_upload_cycle(void)
{
rt_thread_t tid;
tid = rt_thread_create("onenet_send",onenet_upload_entry,RT_NULL,2 * 1024,
RT_THREAD_PRIORITY_MAX / 3 - 1,5);
if (tid)
{
rt_thread_startup(tid);
}
return 0;
}
MSH_CMD_EXPORT(onenet_upload_cycle, send data to OneNET cloud cycle);
二、指令調用
通過板載的rw7000連接到局域網WiFi,再通過Mqtt協議將板載傳感器測量得到的數據傳輸到物聯網,從onenet官網注冊設備并接收數據
三、物聯網可視化顯示
在onenet官網注冊并創(chuàng)建一個設備和項目,并將設備ID與API key綁定到軟件包的配置項中
我們在可視化項目中創(chuàng)建新項目,規(guī)劃文本和圖表顯示,并通過API綁定數據流進行顯示。
最終效果圖
溫度低于30度led矩陣為綠色
溫度介于30度與32度之間led矩陣為藍色
溫度高于32度led矩陣為紅色
物聯網溫度數據上傳效果圖
評論