883|4

18

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子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 MAX1704XAdafruit 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也有基于此模块的详细例程,能很快上手。

最新回复

或者你可以上网上找一找资料,修改Arduino IDE的配置,改变编码格式,让它处理汉字的时候,自动对应为GB2132方式保存程序中的汉字数据。   详情 回复 发表于 2023-8-30 09:17
点赞 关注
 
 

回复
举报

1704

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

想知道中文字库的存储在哪里,存储需要多大空间

点评

或者你可以上网上找一找资料,修改Arduino IDE的配置,改变编码格式,让它处理汉字的时候,自动对应为GB2132方式保存程序中的汉字数据。  详情 回复 发表于 2023-8-30 09:17
Arduino下处理中文,是按照UNICODE方式处理的,你想显示汉字,需要自己弄个字库芯片专门处理。程序中想要显示汉字,需要你自己确定汉字对应的区位码并预先存储起来。显指定的示汉字的时候,使用预先保存的区位码到字  详情 回复 发表于 2023-8-30 09:11
 
 
 

回复

210

帖子

3

TA的资源

一粒金砂(高级)

板凳
 

过程详细,有指导意义,谢谢楼主分享

 
 
 

回复

210

帖子

3

TA的资源

一粒金砂(高级)

4
 
本帖最后由 suncat 于 2023-8-30 09:19 编辑
火辣西米秀 发表于 2023-8-30 07:25 想知道中文字库的存储在哪里,存储需要多大空间

Arduino下处理中文,不是按照GB2132方式处理的,你想要字库,需要自己弄个字库芯片专门处理。程序中想要显示汉字,需要你自己确定汉字对应的区位码并预先存储起来。显指定的示汉字的时候,使用预先保存的区位码到字库中找点阵数据。

 
 
 

回复

210

帖子

3

TA的资源

一粒金砂(高级)

5
 
火辣西米秀 发表于 2023-8-30 07:25 想知道中文字库的存储在哪里,存储需要多大空间

或者你可以上网上找一找资料,修改Arduino IDE的配置,改变编码格式,让它处理汉字的时候,自动对应为GB2132方式保存程序中的汉字数据。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表