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

源碼運行流程如下:

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

源碼運行流程如下:

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

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

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

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

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

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


本程序利用輸入捕獲來測量高電平的脈寬,來解碼紅外遙控信號,利用兩個定時器產生發送信號,一個定時器用于PWM脈沖信號發送時間計時一個定時器用于38K PWM脈沖信號產生。
具體程序如下所示:
發送驅動具體代碼參考MCU程序user_ir_send文件夾中文件;
接收驅動具體代碼參考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值是熱敏電阻的重要參數。
通過轉換,得到溫度T1與電阻Rt的關系:
T1=1/(ln(Rt/R)/B+1/T2)
最終對應的攝氏溫度:
Temp=T1-273.15
具體程序如下所示:
驅動具體代碼參考MCU程序user_ntc_3950_10k_read文件夾中文件;
2.2WiFi部分介紹
本項目Wifi模塊使用的是ESP8266,物聯網平臺使用的是騰訊物聯網平臺以及心知天氣平臺,二者分別使用MQTT和HTTP的方式進行連接,下面對WiFi代碼比較關鍵的地方進行具體說明。
2.2.1 WiFi配網流程介紹
騰訊物聯網平臺WiFi配網過程如下圖所示:

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

綁定UDP bind();

監聽UDP是否有數據傳輸;

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


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