聚丰项目 > 基于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)下载