四、軟件部分
1程序簡介
WiFi程序
https://github.com/caiyongsheng-designer/EST_TEST.git
主控MCU程序
https://github.com/caiyongsheng-designer/Intelligent-air-conditioner-box.git
(1)主控MCU程序設計:
主控芯片程序設計使用時間片輪轉(zhuǎn)法,時間片周期為100ms,該周期使用滴答定時器中斷來觸發(fā)。
代碼結(jié)構如下:

源碼運行流程如下:

(2)wifi程序設計:
WiFi程序設計基于樂鑫ESP8266_RTOS_SDK開源代碼進行設計。
代碼結(jié)構如下:

源碼運行流程如下:

2具體實現(xiàn)方法介紹
2.1MCU部分介紹
2.1.1 時間片輪詢法具體程序架構如下:
Step1.參數(shù)初始化:
左右滑動查看完整內(nèi)容
// 初始化任務結(jié)構
typedefstruct _TASK_COMPONENTS
{
uint8_tRun; // 程序運行標記:0-不運行,1運行
uint8_tTimer;// 起始計時器
uint8_tItvTime;// 任務運行間隔時間【AKA計時器初始值值】
void(*TaskHook)(void);// 要運行的任務函數(shù),注意該函數(shù)不得傳參
} TASK_COMPONENTS;// 任務定義
staticTASK_COMPONENTS TaskComps[] =
{
{0,2,2, WiFi_Uart_Receive_All}, // 間隔200MS運行一次,讀WiFi串口數(shù)據(jù)
{0,3,3, ir_receive_data_output},// 間隔300MS讀一下紅外接收是否有數(shù)據(jù)
{0,5,5, WiFi_data_Upload}, // 間隔500ms比較WiFi上傳數(shù)據(jù)變化,變化則上報
{0,10,10, Read_Temperature_Display},// 間隔1S運行一次,溫度測量
{0,20,20, rtc_minute_30_read},// 間隔2S,讀RTC,間隔30Min獲取實時天氣并讀取室內(nèi)濕度
{0,50,50,Wifi_state_inquire},// 間隔5S,檢查WiFi狀態(tài)
{0,100,100,WiFi_data_Upload_Timing_Report}//間隔10S進行當前設備狀態(tài)上報
};
typedefenum _TASK_LIST
{
TASK_WiFi_Uart_Receive_All,
TASK_ir_receive_data_output,
TASK_WiFi_data_Upload,
TASK_Read_Temperature_Display,
TASK_rtc_minute_30_read,
TASK_GET_Wifi_State,
TASK_WiFi_data_Upload_Timing_Report,
TASKS_MAX// 總的可供分配的定時任務數(shù)目
} TASK_LIST;
Step2.對滴答定時器開啟初始化
左右滑動查看完整內(nèi)容
/** *@brief啟動系統(tǒng)滴答計時器 SysTick *@paramIT_frequency: 滴答計時器每秒的中斷次數(shù) *@retval無 */ voidSysTick_Init(uint32_t IT_frequency) { /* SystemCoreClock在這里默認為48M * SystemCoreClock / 1000 1ms中斷一次 * SystemCoreClock / 100000 10us中斷一次 * SystemCoreClock / 1000000 1us中斷一次 */ IT_Period =SystemCoreClock/ IT_frequency; uint32_t err =SysTick_Config (IT_Period); assert(err==0);//capture error }
Step3.啟動滴答定時器中斷,并在中斷中對來到的任務標志使能
左右滑動查看完整內(nèi)容
/**
*@briefSysTick的中斷服務函數(shù)
*@param無
*@retval無
*/
externvoidSysTick_Handler(void);//需要先extern聲明一下避免編譯器警告
voidSysTick_Handler(void)
{
TaskRemarks();
}
voidTaskRemarks(void)
{
uint8_t i;
for(i=0; i
Step4.
main函數(shù)中調(diào)用任務函數(shù)TaskProcess,判斷任務是否啟動
左右滑動查看完整內(nèi)容
voidTaskProcess(void)
{
uint8_t i;
for(i=0; i
2.1.2 DHT11驅(qū)動介紹
A
DHT11基本知識介紹
DHT11數(shù)字溫濕度傳感器是一款含有已校準數(shù)字信號輸出的溫濕度復合傳感器,內(nèi)部由一個8位單片機控制一個電阻式感濕元件和一個NTC測溫元件。DHT11采用單總線協(xié)議,其溫度測量范圍為0~50℃,誤差在±2℃;濕度的測量范圍為20%~90%RH(Relative Humidity相對濕度—指空氣中水汽壓與飽和水汽壓的百分比),誤差在±5%RH。DHT11電路很簡單,只需要將Dout引腳連接單片機的一個I/O即可,不過該引腳需要上拉一個電阻,DHT11的供電電壓為3~5.5V。

B
DHT11協(xié)議及數(shù)據(jù)格式
DHT11采用單總線協(xié)議與單片機通信,單片機發(fā)送一次復位信號后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,等待主機復位結(jié)束后,DHT11發(fā)送響應信號,并拉高總線準備傳輸數(shù)據(jù)。一次完整的數(shù)據(jù)為40bit,按照高位在前,低位在后的順序傳輸數(shù)據(jù)格式為:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗和,一共5字節(jié)(40bit)數(shù)據(jù)。由于DHT11分辨率只能精確到個位,所以小數(shù)部分是數(shù)據(jù)全為0。校驗和為前4個字節(jié)數(shù)據(jù)相加,校驗的目的是為了保證數(shù)據(jù)傳輸?shù)臏蚀_性。DHT11只有在接收到開始信號后才觸發(fā)一次溫濕度采集,如果沒有接收到主機發(fā)送復位信號,DHT11不主動進行溫濕度采集。當數(shù)據(jù)采集完畢且無開始信號后,DHT11自動切換到低速模式。
C
DHT11操作時序
DHT11操作時序如下所示:

具體操作步驟如下:
步驟一
DHT11上電后(DHT11上電后要等待1S以越過不穩(wěn)定狀態(tài)在此期間不能發(fā)送任何指令),測試環(huán)境溫濕度數(shù)據(jù),并記錄數(shù)據(jù),同時DHT11的DATA數(shù)據(jù)線由上拉電阻拉高一直保持高電平;此時DHT11的DATA引腳處于輸入狀態(tài),時刻檢測外部信號。
步驟二
微處理器的I/O設置為輸出同時輸出低電平,且低電平保持時間不能小于18ms(最大不得超過 30ms),然后微處理器的I/O設置為輸入狀態(tài),由于上拉電阻,微處理器的I/O即DHT11的DATA數(shù)據(jù)線也隨之變高,等待DHT11作出回答信號。
發(fā)送信號如圖所示:

步驟三
DHT11的DATA引腳檢測到外部信號有低電平時,等待外部信號低電平結(jié)束,延遲后DHT11的DATA引腳處于輸出狀態(tài),輸出83微秒的低電平作為應答信號,緊接著輸出87微秒的高電平通知外設準備接收數(shù)據(jù),微處理器的I/O此時處于輸入狀態(tài),檢測到I/O有低電平(DHT11回應信號)后,等待87微秒的高電平后的數(shù)據(jù)接收,
發(fā)送信號如圖所示:

步驟四
由DHT11的DATA引腳輸出40位數(shù)據(jù),微處理器根據(jù)I/O電平的變化接收40位數(shù)據(jù),位數(shù)據(jù)“0”的格式為:54微秒的低電平和23-27微秒的高電平,位數(shù)據(jù)“1”的格式為:54微秒的低電平加68-74微秒的高電平。
位數(shù)據(jù)“0”、“1”格式信號如圖所示:

結(jié)束信號:
DHT11的DATA引腳輸出40位數(shù)據(jù)后,繼續(xù)輸出低電平54微秒后轉(zhuǎn)為輸入狀態(tài),由于上拉電阻隨之變?yōu)楦唠娖?。但DHT11內(nèi)部重測環(huán)境溫濕度數(shù)據(jù),并記錄數(shù)據(jù),等待外部信號的到來。
具體程序如下所示:
具體代碼參考MCU程序user_DHT11文件夾中文件;
2.1.3 紅外收發(fā)驅(qū)動介紹
紅外遙控是一種無線、非接觸控制技術,具有抗干擾能力強,信息傳輸可靠,功耗低,成本低,易實現(xiàn)等顯著優(yōu)點,被諸多電子設備特別是家用電器廣泛采用,并越來越多的應用到計算機系統(tǒng)中。由于紅外線遙控不具有像無線電遙控那樣穿過障礙物去控制被控對象的能力,所以,在設計紅外線遙控器時,不必要像無線電遙控器那樣,每套(發(fā)射器和接收器)要有不同的遙控頻率或編碼(否則,就會隔墻控制或干擾鄰居的家用電器),所以同類產(chǎn)品的紅外線遙控器,可以有相同的遙控頻率或編碼,而不會出現(xiàn)遙控信號“串門”的情況。這對于大批量生產(chǎn)以及在家用電器上普及紅外線遙控提供了極大的方面。由于紅外線為不可見光,因此對環(huán)境影響很小,再由紅外光波動波長遠小于無線電波的波長,所以紅外線遙控不會影響其他家用電器,也不會影響臨近的無線電設備。紅外遙控的編碼目前廣泛使用的是:NEC Protocol的PWM(脈沖寬度調(diào)制)和 Philips RC-5 Protocol的PPM(脈沖位置調(diào)制)。本項目使用的是NEC編碼方式。
NEC編碼方式特點如下:
8位地址和8位指令長度;
地址和命令2次傳輸(確??煽啃裕?/p>
PWM脈沖位置調(diào)制,以發(fā)射紅外載波的占空比代表“0”和“1”;
載波頻率為38Khz;
位時間為1.125ms或2.25ms;
NEC碼的位定義:
一個脈沖對應560us的連續(xù)載波,一個邏輯1傳輸需要2.25ms(560us脈沖+1680us低電平),一個邏輯0的傳輸需要1.125ms(560us脈沖+560us低電平)。而遙控接收頭在收到脈沖的時候為低電平,在沒有脈沖的時候為高電平,這樣,我們在接收頭端收到的信號為:邏輯1應該是560us低+1680us高,邏輯0應該是560us低+560us高。NEC遙控指令的數(shù)據(jù)格式為:同步碼頭、地址碼、地址反碼、控制碼、控制反碼。同步碼由一個9ms的低電平和一個4.5ms的高電平組成,地址碼、地址反碼、控制碼、控制反碼均是8位數(shù)據(jù)格式。按照低位在前,高位在后的順序發(fā)送。采用反碼是為了增加傳輸?shù)目煽啃裕捎糜谛r灒?/p>


本程序利用輸入捕獲來測量高電平的脈寬,來解碼紅外遙控信號,利用兩個定時器產(chǎn)生發(fā)送信號,一個定時器用于PWM脈沖信號發(fā)送時間計時一個定時器用于38K PWM脈沖信號產(chǎn)生。
具體程序如下所示:
發(fā)送驅(qū)動具體代碼參考MCU程序user_ir_send文件夾中文件;
接收驅(qū)動具體代碼參考MCU程序user_bsp_gpt_pwm文件夾中文件;
2.1.4 NTC讀取介紹
采用NTC10K熱敏電阻,使用AN008通道進行ADC讀取,計算出熱敏電阻上的電壓,再通過公式法算出當前溫度。
公式法如下所示:
NTC熱敏電阻溫度計算公式:Rt=R*EXP(B*(1/T1-1/T2))
T1和T2指的是K度,即開爾文溫度。
Rt是熱敏電阻在T1溫度下的阻值。
R是熱敏電阻在T2常溫下的標稱阻值。10K的熱敏電阻25℃的值為10K(即R=10K)。
T2=(273.15+25)。
EXP(?)是e的?次方。
B值是熱敏電阻的重要參數(shù)。
通過轉(zhuǎn)換,得到溫度T1與電阻Rt的關系:
T1=1/(ln(Rt/R)/B+1/T2)
最終對應的攝氏溫度:
Temp=T1-273.15
具體程序如下所示:
驅(qū)動具體代碼參考MCU程序user_ntc_3950_10k_read文件夾中文件;
2.2WiFi部分介紹
本項目Wifi模塊使用的是ESP8266,物聯(lián)網(wǎng)平臺使用的是騰訊物聯(lián)網(wǎng)平臺以及心知天氣平臺,二者分別使用MQTT和HTTP的方式進行連接,下面對WiFi代碼比較關鍵的地方進行具體說明。
2.2.1 WiFi配網(wǎng)流程介紹
騰訊物聯(lián)網(wǎng)平臺WiFi配網(wǎng)過程如下圖所示:

WiFi配網(wǎng)流程如上圖所示,下面主要講解下WiFi UDP連接建立,以及如何通過json字符串獲得小程序的token。
WiFi UDP建立步驟如下:
WiFi進入soft AP模式,找到路由進行連接;
連接成功后WiFi建立socket();

綁定UDP bind();

監(jiān)聽UDP是否有數(shù)據(jù)傳輸;

小程序通過UDP傳輸發(fā)送的json字符串如下所示:
{"cmdType":1,"ssid":"Home-WiFi","password":"abcd1234",
"token":"6aa11111****23****546****11****d"}
可以通過cjson對字符串進行解析,解析出當前WiFi所需連接路由的ssid,password,以及要發(fā)給騰訊物聯(lián)網(wǎng)平臺的token當設備端連接路由器,與騰訊物聯(lián)網(wǎng)平臺建立MQTT連接并訂閱后,將token發(fā)送到騰訊物聯(lián)網(wǎng)平臺。發(fā)送成功后,手機APP、騰訊物聯(lián)網(wǎng)平臺、設備端三者通過token實現(xiàn)綁定,配網(wǎng)完成。
具體程序如下所示:
驅(qū)動具體代碼參考WiFi程序user_udp_sever文件夾中文件;
2.2.2 WiFi http連接心知天氣流程介紹
WiFi連接路由后,建立socket,進行l(wèi)wip_connect連接知心天氣端口,發(fā)送get指令獲取返回信息。
具體程序如下所示:
驅(qū)動具體代碼參考WiFi程序user_http_request文件夾中文件;
2.2.3 WiFi mqtt連接騰訊云流程介紹
騰訊物聯(lián)網(wǎng)三元碼動態(tài)生成,進行mqtt初始化;
連接騰訊物聯(lián)網(wǎng)平臺,騰訊物聯(lián)網(wǎng)平臺端口為1883;
連接成功后進行訂閱;
訂閱成功后可以與騰訊物聯(lián)網(wǎng)平臺按照約定的json結(jié)構進行數(shù)據(jù)收發(fā);
具體程序如下所示:
驅(qū)動具體代碼參考WiFi程序user_mqtt_tcp文件夾中文件;
五、BOM清單


-
mcu
+關注
關注
147文章
18964瀏覽量
399279 -
瑞薩
+關注
關注
37文章
22487瀏覽量
90945 -
WIFI
+關注
關注
82文章
5514瀏覽量
213729 -
智能空調(diào)
+關注
關注
0文章
79瀏覽量
6371
原文標題:瑞薩RA MCU創(chuàng)意秀 | 基于瑞薩RA2E1實現(xiàn)的智能空調(diào)伴侶(下)
文章出處:【微信號:瑞薩嵌入式小百科,微信公眾號:瑞薩嵌入式小百科】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于瑞薩R7FA2E1A72DFL MCU的智能空調(diào)伴侶方案(上)
【RA-Eco-RA2E1-48PIN-V1.0開發(fā)板試用】先來點個燈
【RA-Eco-RA2E1-48PIN-V1.0開發(fā)板試用】開發(fā)板介紹&環(huán)境搭建
【RA-Eco-RA2E1-48PIN-V1.0開發(fā)板試用】開發(fā)板介紹和環(huán)境搭建
瑞薩R7FA2L1AB2DFL上手體驗(Part1)--IAR+RSA Setting
瑞薩e2studio(2)----GPIO輸出
瑞薩e2studio(3)----GPIO輸入檢測
基于瑞薩MCU-R7的智能小車設計
基于R7FA2L1AB2DFL demo板測試CLKOUT時鐘驅(qū)動CAN通訊
基于瑞薩R7FA2E1A72DFL的可觸摸燈帶控制器設計
基于瑞薩R7FA2E1A72DFL MCU的智能空調(diào)伴侶方案(下)
評論