【得捷电子Follow me第2期】Arduino速通教程
[复制链接]
本帖最后由 Lucheni 于 2023-8-29 14:41 编辑
本教程基于Adafruit 5693 ESP32-S3 Reverse TFT Feather(后简称Reverse板),与活动开发板Adafruit 5483 ESP32-S3 TFT Feather非常类似,但可能有细微电路差别,仅作为Arduino环境下的快速上手教程,具体使用请查阅Adafruit官方教程:Overview | Adafruit ESP32-S3 TFT Feather | Adafruit Learning System 若英文阅读有困难,推荐edge浏览器打开后使用自带翻译功能
本教程为速通教程,追求的是最快速地完成所有分支任务,并不适合想要刨根问底学习的开发者,若想要学习驱动原理或代码逻辑,请仔细阅读Adafruit官方教程
上手第一步:熟悉开发板
出厂Demo
拿到开发板的第一步可以使用Type-C数据线供电,此时开发板应如图显示,第一行为开发板名称(红色),第二行为例程名称(黄色),第三行为电量信息(绿色),usb供电下电量信息可能会显示超过100%,这是正常现象,第四行为板卡连接的I2C设备地址(蓝色),此板卡到货状态应该只焊接了MAX17048电池监视器,此传感器通信地址为0x36,此时屏幕上显示内容应为I2C:0x36
出厂例程Adafruit应该是基于Arduino环境编写的,官方也开放了Reverse板的出厂Demo代码:Factory Shipped Demo | Adafruit ESP32-S3 Reverse TFT Feather | Adafruit Learning System
清除老旧库文件
Arduino环境开发很容易出现硬件库冲突的情况,比如同事安装了tft_espi显示库和Adafruit官方显示库,编译过程中就有可能报错,所以建议先清除之前Arduino已安装的库文件,或将他们备份到另一个文件夹里,待本项目开发完毕后再恢复。
各人Arduino软件安装流程不同,库文件保存地址也不同,本例程参考默认保存地址为C:\Users\Lucheni\Documents\Arduino,库文件在此地址下的libraries文件夹下,建议备份后清空此文件夹。
安装相关库文件
此时可以安装Adafruit为此开发板相关硬件所设计的库文件,Arduino下安装库文件方式为工具-管理库
在搜索栏输入你想要的库文件,依次安装Adafruit MAX1704X,Adafruit ST7735 and ST7789 Library,安装过程中可能会询问是否安装所有依赖库,点击安装所有。
任务一:控制屏幕显示中文
屏幕显示测试
既然要显示中文,我们首先进行屏幕显示的测试,测试例程为文件-示例-Adafruit ST7735 and ST7789 Library-graphicstest_feather_esp32s2_tft
打开例程,选择开发板和串口号后就可以上传,此时开发板屏幕即开始显示测试,会显示不同尺寸、颜色的字符并显示不同的图形,以及最后的屏幕翻转显示。简单浏览代码可以发现Adafruit将繁杂的显示任务抽象为了简单的draw函数,显示文字为drawtext,显示像素为drawPixel,以及线以及各种形状的显示:drawFastHLine、drawFastVLine、drawCircle、drawTriangle。这些显示函数本次速通并不会使用,若想学习用法,请参考Adafruit官方教程:Graphics Primitives | Adafruit GFX Graphics Library | Adafruit Learning System
显示中文
对于速通教程来说,显示中文虽然是第一个任务,但可能是最难的任务,因为其他的任务都有Adafruit官方硬件库支持,而官方显示库仅能显示英文,中文显示需要自己一点点办法
对于常规的开发来说,显示中文的正常开发逻辑是先用第三方软件生成中文字库,之后导入到已有的显示库中,再逐一显示。但基于速通的目的,本教程采用了一点偷懒的办法~
由于任务1要求仅为显示中文,所以我个人认为在只需要显示几个中文字符的需求下,以位图显示中文相对简单直接,故本次速通教程将使用官方教程末尾的一个函数:drawBitmap。
生成中文字
本次生成中文字使用软件为正点原子开发板资料里的PCtoLCD2002,实际网上还有大量类似软件,Adafruit官方也推荐了位图-内存图的网页工具image2cpp (javl.github.io)
本速通教程仅显示四个中文汉字:中文显示
首先打开软件的设置菜单,对生成的格式进行设置,本次设置格式为:阴码、逐行式、C51格式
其他相关设置可以自己尝试,本次教程追求速通就不赘述了
选择确定,回到初始页面,在输入行输入本次需要显示的四个中文字符:中文显示(步骤①)
点击生成子模(步骤②)后下方即为本次需要使用的字符数据(步骤③)
按照教程使用PROGMEM指令将字符数据保存于内存中,再使用drawBitmap命令显示(drawBitmap函数6个参数分别为显示位置x,y,数据地址,位图宽度,位图高度,显示颜色)即可。
参考代码:
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>
// Use dedicated hardware SPI pins
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
const uint8_t PROGMEM str1[]= {此处字符请按需自行生成!};
const uint8_t PROGMEM str2[]= {此处字符请按需自行生成!};
const uint8_t PROGMEM str3[]= {此处字符请按需自行生成!};
const uint8_t PROGMEM str4[]= {此处字符请按需自行生成!};
void setup(void) {
Serial.begin(9600);
delay(500);
Serial.print(F("Hello! Feather TFT Test"));
// turn on backlite
pinMode(TFT_BACKLITE, OUTPUT);
digitalWrite(TFT_BACKLITE, HIGH);
// turn on the TFT / I2C power supply
pinMode(TFT_I2C_POWER, OUTPUT);
digitalWrite(TFT_I2C_POWER, HIGH);
delay(10);
// initialize TFT
tft.init(135, 240); // Init ST7789 240x135
tft.setRotation(1);
tft.fillScreen(ST77XX_BLACK);
Serial.println(F("Initialized"));
uint16_t time = millis();
tft.fillScreen(ST77XX_BLACK);
time = millis() - time;
Serial.println(time, DEC);
delay(500);
// large block of text
tft.fillScreen(ST77XX_BLACK);
// tft print function!
tft.drawBitmap(0, 0, str1, 16, 16, ST77XX_WHITE);
tft.drawBitmap(16, 0, str2, 16, 16, ST77XX_WHITE);
tft.drawBitmap(32, 0, str3, 16, 16, ST77XX_WHITE);
tft.drawBitmap(48, 0, str4, 16, 16, ST77XX_WHITE);
Serial.println("done");
delay(1000);
}
void loop() {
tft.invertDisplay(true);
delay(500);
tft.invertDisplay(false);
delay(500);
}
显示效果如下(loop中加入了翻转显示,实际为底色和字符黑白交替显示):
任务二:网络功能使用
此任务可直接使用官方例程:示例-WiFi-WiFiAccessPoint
从注释可知本例程使用方式:
WiFiAccessPoint.ino创建一个WiFi接入点,并在其上提供一个网络服务器。
步骤:
1.连接到接入点“yourAp”
2.将您的网络浏览器指向http://192.168.4.1/H打开LED或http://192.168.4.1/L把它关掉或在PuTTY终端上运行原始TCP“GET/H”和“GET/L”,IP地址为192.168.4.1,端口为80
注意!!!!!!请按需修改ssid及password,例程的LED管脚并不是活动板卡的LED管脚,请自行修改,LED管脚号请参考官方例程:Pinouts | Adafruit ESP32-S3 TFT Feather | Adafruit Learning System
任务三:控制WS2812B
此任务可以直接从factory_test源码修改完成,以下仅展示LED显示关键代码
void setup() {
TB.neopixelPin = PIN_NEOPIXEL;//板卡连接WS2812B引脚号
TB.neopixelNum = 1; //板卡连接WS2812B数量
TB.begin();
TB.setColor(WHITE);//设置LED为白色
}
void loop() {
TB.setColor(TB.Wheel(j++));//LED颜色循环显示
delay(10);
return;
}
任务四:WS2812B效果控制
既然为速通教程,我选择了最易实现的分任务2,使用Adafruit官方的https://www.adafruit.com/product/3449,直接使用官方例程示例-Adafruit_DotStarMatrix-dotstar_wing(记得修改例程中的开发板型号,否则需要重新烧写固件!)
简单修改显示内容后即可显示自己想要的内容:
此任务若追求速度,也可选择分任务4,使用Adafruit的音乐播放器模块:https://www.adafruit.com/product/3357,Adafruit也有基于此模块的详细例程,能很快上手。
|