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