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