基于ESP32-S3-BOX-Lite和Wio Terminal的蓝牙BLE通信与显示系统
本文使用ESP32-S3-BOX-Lite和Wio Terminal开发了一个蓝牙BLE双向通信与显示系统, 两个嵌入式模块可以相互收发数据,并在屏幕上进行显示。
标签
嵌入式系统
BLE
wio terminal
ESP32-S3-BOX-LITE
Funpack2-5
chinaking
更新2023-08-04
886

基于ESP32-S3-BOX-LiteWio Terminal的蓝牙BLE通信与显示系统

                                                                                            老胡

  • 系统简介

        本文使用ESP32-S3-BOX-Lite和Wio Terminal开发了一个蓝牙BLE双向通信与显示系统, 两个嵌入式模块可以相互收发数据,获取对方按键状态,并通过屏幕进行显示。

  • 硬件组成

系统主要用到Wio Terminal和ESP32-S3-BOX-Lite两款模块各1个。这两种模块在硬禾学堂的Funpack第1季第12期和第2季第5期分别进行了推广。

https://www.eetree.cn/page/digikey-funpack/phase17

https://www.eetree.cn/page/digikey-funpack/phase12

FiEUPRIh4aLPbD5sqOfFbxRuPUg0                        Fg68I9-l8UEjXtTpT9natB5zKboI

           ESP32-S3-BOX-Lite                                                Wio Terminal

两个模块的硬件比较相似,主要参数比较见下表

 

ESP32-S3-BOX-Lite

Wio Terminal

主芯片

ESP32-S3

ATSAMD51P19 ARM Cortex-M4F

CPU速度

240MHz

120MHz,最高200 MHz

屏幕分辨率

320*240

320*240

屏幕驱动

ST7789V

ILI9341

屏幕尺寸

2.4英寸

2.4英寸

WIFI

支持

支持

蓝牙

支持BLE5.0

支持BLE5.0

其它

麦克风、扬声器

加速计、麦克风、扬声器、光传感器、红外发射器

  • 方案设计

   系统的设计方案如下图所示

FnyfQN_r019Xwgyx0V72P-gMFh5E

        ESP32-S3-BOX-Lite正面具有3个用户按键,按键采用分压电路的方式,将1路ADC输入单片机。单片机收到按键信息后,可将按键状态转换成1、2、3等数值,并通过屏幕显示。单片机自带Wifi和BLE无线功能。BOX作为BLE Server,可将按键数值信号通过BLE发送出去。BLE Server配置了数据收发的UUID,可以发送和接收数据。

        Wio Terminal作为BLE Client,通过扫描BLE Server的MAC地址,与服务器建立蓝牙连接。连接成功后,客户端能够读到服务器的按键数值状态,并在显示屏上显示出来。Wio Terminal也具有1个5位按键,也可以将按键信息通过BLE无线方式发送到ESP32-S3-BOX-Lite,实现双向通信功能。

        两个模块BLE通信的原理如下图所示

FsWupRY_-nXXlmgyaBM-6OOkD09L

        为了便于测试,也可以用手机代替Wio Terminal,使用手机App nRF Connect搜索BLE Server,测试通信功能。

  • 软件与程序

软件安装

        厂家提供了Espressif-IDE开发环境,因本人还是比较熟悉Arduino,仍都使用Arduino进行开发。

        两个模块使用的驱动见下表

 

ESP32-S3-BOX-Lite

Wio Terminal

开发板驱动

Esp32 by Espressif Systems  2.0.9

Seeed SAMD Boards by Seeed Studio 1.8.1

屏幕驱动

TFT_eSPI

Seeed_Arduino_LCD

蓝牙驱动

ArduinoBLE

Seeed_Arduino_rpcBLE

 

        开发板驱动,需要在Arduino中配置好厂商提供的网址即可搜索到,在线安装;也可离线导入。

https://espressif.github.io/arduino-esp32/package_esp32_index.json

https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

       ESP32-S3-BOX-Lite屏幕和蓝牙驱动,可以在Arduino中直接下载;Wio Terminal屏幕和蓝牙驱动,在官网找到压缩包,导入到Arduino.

注意:Wio Terminal要使用蓝牙功能,需要先更新固件,更新方法见官网。

https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/#update-the-wireless-core-firmware

        Wio Terminal的屏幕驱动也是原厂基于TFT_eSPI修改的,二者不能共存。使用Wio Terminal时,需要将TFT_eSPI卸载或将Arduino库文件下TFT_eSPI文件夹移动到其它目录。

开发过程

ESP32-S3-BOX-Lite

       首先对ESP32-S3-BOX-Lite进行编程,安装好TFT_eSPI库后,需要在C:\Users\Administrator\Documents\Arduino\libraries\TFT_eSPI目录下,在User_Setups 文件夹添加Setup208_ESP32_S3_Box_Lite.h文件,并在TFT_eSPI文件夹的User_Setup_Select.h文件中添加相应的头文件名称。

        在修改和创建Setup208_ESP32_S3_Box_Lite.h文件时,需要参考ESP32-S3-BOX-Lite的硬件资料,确保引脚对应正确。

FtPvRmkHOBkeRwGhGWmxHEMuxBRM

Fu-_3m-rnEZl4crgYIQbG2peNjTI

        如果要使用LVGL库进行显示,还需要配置 触摸引脚 #define TOUCH_CS  3,否则编译会报错。配置完成后,即可使用Arduino进行编程。

        ESP32-S3-BOX-Lite编程完成后,先使用手机App nRF Connect搜索BLE Server并连接,确保连接和通讯正常,然后再用Wio Terminal进行测试。

Ft-hU4EOIYQM_Y02SsZfa4hau7Ln

代码说明

添加头文件

#include <ArduinoBLE.h>
#include <math.h>
#include <TFT_eSPI.h>        //TFT屏驱动 

定义两个显示色块的坐标值变量

int red_x,red_y;  //红色方块坐标
int blue_x,blue_y;  //蓝色方块坐标

定义蓝牙BLE通信的UUID地址

BLEService MyService("181A");
BLEUnsignedIntCharacteristic Character_Write("2A81", BLEWrite | BLENotify);
BLEUnsignedIntCharacteristic Character_Read("2A82", BLERead);

void setup()中添加以下代码

屏幕初始化

tft.init();
tft.setRotation(3); //设置屏幕方向
spr.createSprite(320,240);
spr.fillSprite(TFT_BLACK);
spr.setTextColor(TFT_BLACK);
spr.setTextSize(2);
spr.drawString("Wait BLE connect",30,20);

定义按钮的ADC引脚

pinMode(1, INPUT);//gpio1口为adc button

添加蓝牙设备的名称及UUID地址,确定收发变量

BLE.setLocalName("ESP32-S3-BOX-Lite");  //蓝牙设备名称
BLE.setAdvertisedService(MyService);
MyService.addCharacteristic(Character_Write);
MyService.addCharacteristic(Character_Read);


BLE.addService(MyService);
Character_Write.readValue(iBLE_receive);
Character_Read.writeValue(iBLE_send);

void loop()中,添加以下代码

根据按键确定红方块的坐标和BLE发出的数据,注意发送数据为数值对应的ascii码值
 if (adc_Data>=900 and adc_Data<1000)  //KEY3按下
{
  red_x=260;
  red_y=160;
  iBLE_send=51;
}
else if (adc_Data>=2400 and adc_Data<2500) //KEY2按下
{
  red_x=140;
  red_y=160;
  iBLE_send=50;
}
else if (adc_Data>=2900 and adc_Data<3000)////KEY1按下
{
  red_x=30;
  red_y=160;
  iBLE_send=49;
}
else
{
  red_x=320;
  red_y=160;
  iBLE_send=48;
}

根据接收到Client的数据,并通过蓝色方块坐标的形式进行显示

//根据接收的数据确定蓝色方块的坐标
if (iBLE_receive==1)    //上
{blue_x=150;
blue_y=50;}
else if (iBLE_receive==2)//下
{blue_x=150;
blue_y=110;}
else if (iBLE_receive==3)//左
{blue_x=120;
blue_y=80;}
else if (iBLE_receive==4)//右
{blue_x=180;
blue_y=80;}
else if (iBLE_receive==5)//中
{blue_x=150;
blue_y=80;}
else
{blue_x=320;
blue_y=160;}

在屏幕相应位置上绘制图形,并显示数值

//绘制图形
spr.createSprite(320, 240); 
spr.fillSprite(TFT_WHITE);

 //显示adc数值
spr.setTextColor(TFT_BLACK);
spr.setTextSize(2);
spr.drawString("ADC_Button",30,200);
spr.setTextColor(TFT_BLUE);
spr.setTextSize(2);
spr.drawNumber(adc_Data,30,220);


//显示发出的BLE数值,并图形表示
spr.setTextColor(TFT_BLACK);
spr.setTextSize(2);
spr.drawString("Send Data",200,200);
spr.setTextColor(TFT_BLUE);
spr.setTextSize(2);
spr.drawNumber(iBLE_send-48,200,220);//发出去的是ascii值,屏幕显示的是数值
spr.fillRect(red_x, red_y, 30, 30,TFT_RED);

//显示接收的BLE数值,并图形表示
spr.setTextColor(TFT_BLACK);
spr.setTextSize(2);
spr.drawString("Receive Data",50,10);
spr.setTextColor(TFT_BLUE);
spr.setTextSize(2);
spr.drawNumber(iBLE_receive,50,30);
spr.fillRect(blue_x, blue_y, 30, 30,TFT_BLUE);
spr.drawCircle(165, 95, 50,TFT_BLUE);

spr.pushSprite(0,0);
spr.deleteSprite();//刷新屏幕
  • 演示效果

        测试时,按下ESP32-S3-BOX-Lite的按键,BOX屏幕上会显示按下的按键,Wio Terminal能显示手到的按键代号,如1表示1号按键,3表示3号按键;

        当操作Wio Terminal的5位按钮时,上、下、左、右、中 几个动作分别输出数值1至5并发出,ESP32-S3-BOX-Lite也能通过屏幕显示收到的数据并有动画效果。

        ESP32-S3-BOX-Lite发,Wio Terminal收

Fl8bz1Zcd9LZoaj4T5zyM5jnrNR3

Wio Terminal发,ESP32-S3-BOX-Lite收

FtaB1zYnX-0A7tiWObNoOTJTpbW0

FjSp6_9DjvqL_SeHygcRnYAny7nD

  • 心得体会

        硬件上,ESP32-S3-BOX-Lite的3D打印外壳略显粗糙,尤其是背板螺钉,因塑料材质问题,很容易滑扣。Wio Terminal相对精致美观一些,也更加小巧和轻薄。

        软件上,ESP32-S3-BOX-Lite自带的开发环境和软件资源比较丰富。

        感谢群友岑兄(汤半泛)的大力帮助!

 

附件下载
提交代码.rar
团队介绍
老胡,自动化工程师
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号