聚豐項(xiàng)目 > 基于AB32VG1的電子信息板
該項(xiàng)目實(shí)現(xiàn)了一個(gè)電子信息板功能。具體功能能夠?qū)崿F(xiàn)對服務(wù)器發(fā)送的文字或者圖片進(jìn)行顯示,兼顧時(shí)間顯示功能,通過按鈕可以切換顯示界面,設(shè)置時(shí)間以及查看接收到的數(shù)據(jù),還可以通過網(wǎng)絡(luò)進(jìn)行時(shí)間信息的更新。應(yīng)用前景:可以作為工作牌,可以作為電子便簽,提示一些需要完成的事情等。
hehung
分享hehung
團(tuán)隊(duì)成員
hehung 嵌入式軟件工程師
一、硬件簡介
使用到的硬件器件有無源蜂鳴器,OLED顯示屏,按鍵(三個(gè)),ESP8266-01WiFi模塊,PWM,RTC,串口等。
各個(gè)硬件的工作方式如下:
1. 無源蜂鳴器通過PWM驅(qū)動(dòng),驅(qū)動(dòng)頻率1KHz;
2. OLED顯示屏通過IIC驅(qū)動(dòng);
3.按鍵使用三個(gè)板載按鍵,作為普通IO口;
4. ESP8266-01使用串口與通信,通信波特率115200。
二、硬件接線
三、外設(shè)功能
1. 無源蜂鳴器功能
當(dāng)電子信息板成功收到了服務(wù)器發(fā)送的圖片或者文字之后會(huì)響一秒鐘用于提醒用戶下載成功了。
2. OLED功能
OLED作為顯示功能,是該項(xiàng)目的主要外設(shè),用于顯示從服務(wù)器接收到的圖片或者文字信息,還用于時(shí)間的顯示,以及設(shè)置等。
3. 按鍵
該項(xiàng)目使用的板載的三個(gè)按鍵,S4是一個(gè)【多功能按鍵】,分為長按和短按,短按主要是用作返回使用;長按用于對選擇的項(xiàng)目的確認(rèn)。
S3是【左按鍵】,用于設(shè)置界面切換的時(shí)候向左邊切換,也用于時(shí)間設(shè)置時(shí)對設(shè)置的時(shí)間向下減的操作。
S2是【右按鍵】,用于設(shè)置界面切換的時(shí)候向右邊切換,也用于時(shí)間設(shè)置時(shí)對設(shè)置的時(shí)間向上加的操作。
4. ESP8266-01
WiFi模塊用于與服務(wù)器進(jìn)行通信。
四、硬件架構(gòu)圖
五、實(shí)物連接圖
一、軟件實(shí)現(xiàn)功能
1、時(shí)間顯示;
2、ESP8266-01 上電自連接;
3、手動(dòng)設(shè)置時(shí)間;
4、自動(dòng)獲取網(wǎng)絡(luò)時(shí)間并更新;
5、重新連接WiFi;
6、獲取服務(wù)器發(fā)送的圖片數(shù)據(jù);
7、按鍵信號(hào)采集以及濾波;
8、PWM驅(qū)動(dòng)蜂鳴器;
9、OLED顯示;
10、RTC時(shí)間自動(dòng)累積。
二、軟件流程圖
三、軟件流程圖說明
1、軟件使用RT-Thread OS,多個(gè)線程協(xié)同工作;
2、初始化過程中會(huì)初始化串口,RTC,按鍵,PWM以及OLED;
3、硬件初始化完成之后會(huì)進(jìn)入到ESP8266驅(qū)動(dòng)線程,在該線程中通過串口發(fā)送數(shù)據(jù)配置ESP8266-01,然后與服務(wù)器建立連接,如果連接成功會(huì)發(fā)送“GetTime”從服務(wù)器讀取最新事件信息并更新到RTC模塊;
4、按鍵線程工作周期是10ms,采集按鍵IO狀態(tài)進(jìn)行40ms的濾波功能,判斷按鍵按下狀態(tài),釋放狀態(tài)以及長按狀態(tài)與短按狀態(tài);
5、顯示線程主要用于顯示當(dāng)前的界面以及針對當(dāng)前界面的功能進(jìn)行選擇與設(shè)置,配合按鍵線程完成功能。
四、軟件功能介紹
1. 啟動(dòng)
1)上電或者復(fù)位之后自動(dòng)配置ESP8266-01并連接服務(wù)器,設(shè)置進(jìn)入透傳模式,如果成功連接服務(wù)器。進(jìn)入時(shí)間界面之后會(huì)左上角會(huì)顯示一個(gè)wifi圖標(biāo),如果連接服務(wù)器失敗不會(huì)顯示wifi圖標(biāo);
2)連接服務(wù)器成功之后會(huì)自動(dòng)獲取服務(wù)器提供的網(wǎng)絡(luò)時(shí)間并更新,如果線接服務(wù)器失敗了則會(huì)讀取本地設(shè)置的時(shí)間并顯示出來。
3)啟動(dòng)時(shí),OLED會(huì)顯示wifi初始化,如下圖:
2. 時(shí)間顯示
1)服務(wù)器連接成功或者失敗之后都會(huì)進(jìn)入到時(shí)間顯示界面。會(huì)顯示“當(dāng)前時(shí)間”,“wifi連接狀態(tài)”,“日期”,“星期”,“是否接受到數(shù)據(jù)”;
2)如果收到了服務(wù)器的圖片或者文字之后右上角會(huì)出現(xiàn)一個(gè)信件圖標(biāo),提示有可讀信息;
3)按下【多功能按鍵】(長按或者短按均可)會(huì)進(jìn)入到信息界面,方便查看服務(wù)器收到的信息;
4)按下【左按鍵】會(huì)跳轉(zhuǎn)到信息界面;
5)按下【右按鍵】會(huì)跳轉(zhuǎn)到設(shè)置界面
3. 設(shè)置界面
1)短按【多功能按鍵】返回到時(shí)間顯示界面;
2)按下【右按鍵】切換到WiFi設(shè)置界面;
3)長按【多功能按鍵】進(jìn)入到時(shí)間設(shè)置界面。
4、時(shí)間設(shè)置界面
1)長按【多功能按鍵】會(huì)進(jìn)入到時(shí)間設(shè)置界面;
2)在時(shí)間設(shè)置界面下,進(jìn)入會(huì)自動(dòng)獲取當(dāng)前的時(shí)間;
3)初次進(jìn)入時(shí),”小時(shí)”會(huì)變?yōu)楹诘祝崾拘r(shí)可以被設(shè)置;
4)非初次進(jìn)入時(shí),會(huì)將上次被設(shè)置的選項(xiàng)設(shè)置為黑底,表示可以設(shè)置;
5)長按【多功能按鍵】會(huì)切換被設(shè)置的選項(xiàng),沒按下一次切換一次,切換順序?yàn)椤靶r(shí)”,“分鐘”,“秒”,“年”,“月”,“日”;
6)按下【左按鍵】,選中的待設(shè)置選項(xiàng)向下減1;
7)按下【右按鍵】,選中的待設(shè)置選項(xiàng)向上加1;
8)短按【多功能按鍵】,返回到設(shè)置界面。
5、WiFi界面
1)按下【左按鍵】切換到設(shè)置界面;
2)按下【右按鍵】切換到時(shí)鐘界面;
3)短按【多功能按鍵】返回到時(shí)間顯示界面;
4)長按【多功能按鍵】進(jìn)入到WIfi重新連接界面;
6、WiFi重新連接界面
1)長按【多功能按鍵】進(jìn)行服務(wù)器重新連接;
2)在鏈接過程中會(huì)顯示“網(wǎng)絡(luò)連接中”字樣用于提示用戶在重新連接服務(wù)器;
3)服務(wù)器連接成功之后會(huì)不會(huì)再顯示“網(wǎng)絡(luò)連接”字樣;
4)短按【多功能按鍵】返回到WIFi界面
7、時(shí)鐘界面
1)長按【多功能按鍵】會(huì)進(jìn)入到時(shí)間獲取界面;
2)按下【左按鍵】切換到WIFi界面;
3)按下【右按鍵】切換到信息界面;
4)短按【多功能按鍵】返回到時(shí)間顯示界面。
8、獲取網(wǎng)絡(luò)時(shí)間界面
1)長按【多功能按鍵】會(huì)開始嘗試獲取服務(wù)器的時(shí)間;
2)獲取時(shí)間過程中會(huì)顯示“時(shí)間獲取中”字樣;
3)獲取成功時(shí)候會(huì)不會(huì)再顯示“時(shí)間獲取中”字樣;
4)短按【多功能按鍵】會(huì)返回到時(shí)鐘界面。
9、信息界面
1)長按【多功能按鍵】會(huì)進(jìn)入到信息查看界面;
2)按下【左按鍵】會(huì)切換到時(shí)鐘界面;
3)短按【多功能按鍵】會(huì)返回到時(shí)間顯示界面。
10、信息查看界面
1)用于查看接收到服務(wù)器發(fā)送過來的圖片或者文字信息,如果沒有任何信息還顯示空白;
2)短按【多功能按鍵】返回到信息界面;
11、ESP8266數(shù)據(jù)傳輸介紹
* 圖片數(shù)據(jù)傳輸
1)服務(wù)器需要發(fā)送數(shù)據(jù)的時(shí)候首先會(huì)發(fā)送數(shù)據(jù)“ST”通知客戶端要開始發(fā)送數(shù)據(jù)了,客戶端收到了“ST”之后會(huì)切換到 數(shù)據(jù)接收界面 準(zhǔn)備接收數(shù)據(jù),同時(shí)會(huì)返回“OK”通知到服務(wù)器已經(jīng)準(zhǔn)備好了;
2)服務(wù)器接受到了客戶端返回的“OK”之后就可以發(fā)送圖片數(shù)據(jù)了,數(shù)據(jù)發(fā)送格式如下:
①圖片數(shù)據(jù)分為了64幀進(jìn)行傳輸,沒幀報(bào)文包含38個(gè)數(shù)據(jù),用16進(jìn)制數(shù)據(jù)表示;
②報(bào)文格式為:“BMP-”+傳輸序列+32個(gè)半字節(jié)數(shù)據(jù)+"S";
③傳輸序列從1開始,范圍為:01-64。
3)如果客戶端成功接收到序列,會(huì)返回“OK”,服務(wù)器收到“OK”會(huì)開始發(fā)送下一個(gè)幀;
5)如果客戶端收到的數(shù)據(jù)序列不對,會(huì)返回“FAIL”,服務(wù)器收到“FAIL”會(huì)重新發(fā)送接收失敗的幀;
6)傳輸失敗處理邏輯
①如果服務(wù)器超過30ms沒有收到客戶端返回的確認(rèn)數(shù)據(jù)“OK”,服務(wù)器會(huì)重新發(fā)送當(dāng)前幀;
②如果服務(wù)器連續(xù)發(fā)送了30次相同幀還是沒有收到客戶端的返回?cái)?shù)據(jù),服務(wù)器會(huì)終止發(fā)送;
③如果客戶端50s沒有收到服務(wù)器發(fā)送的數(shù)據(jù),客戶端會(huì)退出數(shù)據(jù)接收模式界面返回到時(shí)間顯示界面;
* 時(shí)間數(shù)據(jù)傳輸
1)客戶端如果要獲取服務(wù)器端的時(shí)間,會(huì)主動(dòng)發(fā)送“GetTime”,服務(wù)器收到“GetTime”之后會(huì)將最新的時(shí)間信息發(fā)送給客戶端;
2)時(shí)間數(shù)據(jù)傳輸格式:”Date:”+年(4Bytes)+月(2Bytes)+日(2Bytes)+時(shí)(2Bytes)+分(2Bytes)+秒(2Bytes)+”END”;
3)客戶端收到了時(shí)候數(shù)據(jù)之后會(huì)將時(shí)間解析出來并更新到RTC;
12、RTC工作
1)上電初始化的時(shí)候會(huì)對RTC進(jìn)行設(shè)置,設(shè)置年月日時(shí)分秒;
2)如果從服務(wù)器獲取到了時(shí)間,會(huì)更新RTC的初始時(shí)間為服務(wù)器獲取的時(shí)間;
3)如果從服務(wù)器獲取時(shí)間失敗,RTC初始時(shí)間為軟件設(shè)置的默認(rèn)值。
13、蜂鳴器
1)本項(xiàng)目使用的是無緣蜂鳴器,通過PWM驅(qū)動(dòng),驅(qū)動(dòng)頻率1KHz;
2)當(dāng)客戶端成功收到了服務(wù)器發(fā)送過來的圖片數(shù)據(jù)之后會(huì)響一秒鐘用于提醒數(shù)據(jù)接收成功了。
14、ESP8266服務(wù)器連接過程
1)ESP8266使用串口與AB32VG1進(jìn)行通信,通信方式為AT指令;
2)ESP8266上電時(shí)會(huì)進(jìn)行設(shè)置,設(shè)置過程:
①發(fā)送“ATE”取消echo模式;
②發(fā)送“AT”測試通信是否成功;
③發(fā)送“AT+CWMODE=1”設(shè)置ESP8266的工作模式為Station模式;
④發(fā)送“AT+CIPMODE=1”進(jìn)入透傳模式;
⑤發(fā)送“AT+CIPMUX=0”設(shè)置單路連接;
⑥發(fā)送“AT+CWJAP=WIFI name,WIFI password”連接路由器;
⑦發(fā)送“AT+CIPSTART=TCP,服務(wù)器IP,服務(wù)器端口號(hào)”連接服務(wù)器;
⑧發(fā)送“AT+CIPSEND”進(jìn)入透傳模式;
15、設(shè)置需要連接的WIFI名稱與密碼
1)設(shè)置需要連接的wifi的名稱和密碼可以通過MSH命令行的方式進(jìn)行;
2)使用串口傳輸上位機(jī)與AB32VG1建立連接,發(fā)送"ESP_WifiSetting WIFI名 WIFI密碼"可以更新需要連接的wifi名以及密碼;
3)Wifi更新成功之后再wifi界面下可以重新建立連接;
4)在MSH命令行模式下更新WIFI舉例:
【ESP_WifiSetting hehung 1234543210】
static int ESP_WifiSetting(int argc, char *argv[]) { if(argc == 3) { rt_sprintf(ESP8266_current_wifi_ip.m_wifi_name, "%s", argv[1]); /*Wifi name*/ rt_sprintf(ESP8266_current_wifi_ip.m_wifi_password, "%s", argv[2]); /*Wifi password*/ rt_kprintf("Wifi名稱與密碼設(shè)置成功\n"); return RT_EOK; } else { rt_kprintf("輸入不合法,請重新輸入,輸入格式:【ESP_WifiSetting Wifi名稱 Wifi密碼】\n"); return RT_ERROR; } } #ifdef FINSH_USING_MSH MSH_CMD_EXPORT(ESP_WifiSetting, Set wifi name and password); #endif
16、設(shè)置服務(wù)器IP與端口號(hào)
1)設(shè)置服務(wù)器IP與端口號(hào)可以通過MSH命令行的方式進(jìn)行;
2)使用串口傳輸上位機(jī)與AB32VG1建立連接,發(fā)送"ESP_IpSetting 服務(wù)器IP 服務(wù)器端口號(hào)"可以更新需要連接的服務(wù)器的IP與密碼;
3)服務(wù)器IP與端口號(hào)更新成功之后再wifi界面下可以重新建立連接;
4) 在MSH命令行模式下更新服務(wù)器IP與端口號(hào)舉例:
【ESP_IpSetting 192.168.101.8 8080】
static int ESP_IpSetting(int argc, char *argv[]) { if(argc == 3) { rt_sprintf(ESP8266_current_wifi_ip.m_ip_addr, "%s", argv[1]); /*server ip address*/ rt_sprintf(ESP8266_current_wifi_ip.m_ip_port, "%s", argv[2]); /*server port*/ rt_kprintf("IP地址與端口號(hào)設(shè)置成功\n"); return RT_EOK; } else { rt_kprintf("輸入不合法,請重新輸入,輸入格式:【ESP_IpSetting IP地址 端口號(hào)】\n"); return RT_ERROR; } } #ifdef FINSH_USING_MSH MSH_CMD_EXPORT(ESP_IpSetting, Set Server IP and PORT); #endif
五、服務(wù)器介紹
1. 啟動(dòng)服務(wù)器按鈕,選擇ip地址,設(shè)置端口號(hào),然后點(diǎn)擊“啟動(dòng)服務(wù)器”按鈕開啟服務(wù)器;
2. 顯示方式下拉框可以選擇圖片的顯示方式;
3. OLED顯示預(yù)覽用于預(yù)覽下位機(jī)OLED將要顯示的內(nèi)容;
4. 選擇圖片按鈕用于選擇需要發(fā)送的圖片;
5. 字體選擇按鈕用于選擇字體;
6. 最下邊的編輯框用于輸入需要發(fā)送的文字信息;
7. 發(fā)送到客戶端按鈕用于發(fā)送OLED顯示預(yù)覽的內(nèi)容到下位機(jī);
8. 中斷發(fā)送按鈕用于終止正在發(fā)送的過程;
六、開發(fā)平臺(tái)
1、客戶端使用AB32VG1作為主控,RT-Thread OS作為嵌入式系統(tǒng);
2、AB32VG1工作頻率為120MHz;
3、開發(fā)軟件:RT-Thread Studio;
4、服務(wù)器使用易語言開發(fā);
七、運(yùn)行代碼
點(diǎn)擊跳轉(zhuǎn)到gitee查看代碼https://gitee.com/hehung/electronic-information-board
(12.32 MB)下載