WeMOS D1 MIni(Esp8266)、NodeMCU与ST7789 TFT液晶显示屏绘制图形
发布日期:2021-05-27 01:23:42 浏览次数:25 分类:技术文章

本文共 8636 字,大约阅读时间需要 28 分钟。

WeMOS D1 MIni(Esp8266)、NodeMCU与ST7789 TFT液晶显示屏绘制图形

材料

  • Wemos D1 Mini/NodeMCU(ESP8266)开发板 一块 (约9元)
  • ST7789 TFT 240*240显示屏一块
  • 10cm杜邦线若干(约1元)
  • 安卓数据线一条(务必是数据线,便宜的安卓电源线不行)

硬件连接图

WemosD1Mini/Nano ST7789
D0 RES
D1 DC
3V3 VCC
GND GND
D5 SCL
D7 SDA

Arduino IDE支持Wemos D1 Mini、

  1. 点击“文件”选则“首选项。
    在这里插入图片描述
  2. 添加Wemos D1 Mini开发板的josn文件
  • 弹出的首选项中点击下图所示的按钮打开开发板管理器页面
    在这里插入图片描述
  • 将”http://arduino.esp8266.com/stable/package_esp8266com_index.json“复制到弹出的页面中,(Arduino IDE自带的开发板并不多。如果想要扩展它支持其他的开发板只需要用这个方式再管理器中进行添加就好。而每个开发板的josn之间用分号隔开即可。粘贴好后,点击”好“
    经过上一步后,再返回的首选相页面点击再次点击”好“进行确认。
    在这里插入图片描述
  1. 在开发板管理器中添加开发板
    如下图所示一次点开:”工具”->“开发板xxxx”->"开发板管理器“在这里插入图片描述
    在弹出的页面搜索栏中输入”esp“后,稍等下,下面就会列出相关的开发板。按照下图所示的方法,点击”安装“进行该类开发板的安装。
    在这里插入图片描述

库安装

Arduino_ST7789.h库安装

  1. 打开上面的地址按照下图方式下载库的zip包文件。
    在这里插入图片描述
    将刚刚的zip文件解压到放到ArduinoIDE安装文件所在目录下的libraries文件夹。重启ArduinoIDE没有报错就表示安装成功了。
    在这里插入图片描述

Adafruit-GFX-Library库安装

这是一个图形库,提供方法让你绘制更丰富的显示内容。安装地址如下:方法同上

Adafruit_BusIO库安装

Adafruit-GFX-Library库文件依赖另外一个叫Adafruit_BusIO的库,所以需要安装下,安装地址如下:

安装方法同上。

效果测试

测试代码

Arduino_ST7789库自带的例程进行的修建,改成了单一支持240*240像素,无cs线的版本。方便入门者测试。

/***************************************************  This is a library for the ST7789 IPS SPI display.  Originally written by Limor Fried/Ladyada for   Adafruit Industries.  Modified by Ananev Ilia  happyjoey217 Modified special for Esp8266 vs 1.3’’TFT 2020.1.21 ****************************************************/#include 
// 图形库#include
// Hardware-specific library for ST7789 (with or without CS pin)#include
#define TFT_DC D1 // 用户自定义#define TFT_RST D0 // 用户自定义#define TFT_MOSI D7 // WemosD1Mini的Mosi引脚#define TFT_SCLK D5 // WemosD1Mini的Sclk引脚Arduino_ST7789 tft = Arduino_ST7789(TFT_DC, TFT_RST);float p = 3.1415926;void setup(void) {
Serial.begin(9600); Serial.print("Hello! ST7789 TFT Test"); tft.init(240, 240); // initialize a ST7789 chip, 240x240 pixels Serial.println("Initialized"); uint16_t time = millis(); tft.fillScreen(BLACK); time = millis() - time; Serial.println(time, DEC); delay(500); // large block of text tft.fillScreen(BLACK); //屏幕中添加文字并设置演示 testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", WHITE); delay(1000); // tft print function tftPrintTest(); delay(4000); // a single pixel tft.drawPixel(tft.width()/2, tft.height()/2, GREEN); delay(500); // line draw test testlines(YELLOW); delay(500); // optimized lines testfastlines(RED, BLUE); delay(500); testdrawrects(GREEN); delay(500); testfillrects(YELLOW, MAGENTA); delay(500); tft.fillScreen(BLACK); testfillcircles(10, BLUE); testdrawcircles(10, WHITE); delay(500); testroundrects(); delay(500); testtriangles(); delay(500); mediabuttons(); delay(500); Serial.println("done"); delay(1000);}void loop() {
tft.invertDisplay(true); delay(500); tft.invertDisplay(false); delay(500);}void testlines(uint16_t color) {
tft.fillScreen(BLACK); for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(0, 0, x, tft.height()-1, color); } for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(0, 0, tft.width()-1, y, color); } tft.fillScreen(BLACK); for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); } for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(tft.width()-1, 0, 0, y, color); } tft.fillScreen(BLACK); for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(0, tft.height()-1, x, 0, color); } for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); } tft.fillScreen(BLACK); for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); } for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); }}void testdrawtext(char *text, uint16_t color) {
tft.setCursor(0, 0); tft.setTextColor(color); tft.setTextWrap(true); tft.print(text);}void testfastlines(uint16_t color1, uint16_t color2) {
tft.fillScreen(BLACK); for (int16_t y=0; y < tft.height(); y+=5) {
tft.drawFastHLine(0, y, tft.width(), color1); } for (int16_t x=0; x < tft.width(); x+=5) {
tft.drawFastVLine(x, 0, tft.height(), color2); }}void testdrawrects(uint16_t color) {
tft.fillScreen(BLACK); for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); }}void testfillrects(uint16_t color1, uint16_t color2) {
tft.fillScreen(BLACK); for (int16_t x=tft.width()-1; x > 6; x-=6) {
tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); }}void testfillcircles(uint8_t radius, uint16_t color) {
for (int16_t x=radius; x < tft.width(); x+=radius*2) {
for (int16_t y=radius; y < tft.height(); y+=radius*2) {
tft.fillCircle(x, y, radius, color); } }}void testdrawcircles(uint8_t radius, uint16_t color) {
for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
tft.drawCircle(x, y, radius, color); } }}void testtriangles() {
tft.fillScreen(BLACK); int color = 0xF800; int t; int w = tft.width()/2; int x = tft.height()-1; int y = 0; int z = tft.width(); for(t = 0 ; t <= 15; t++) {
tft.drawTriangle(w, y, y, x, z, x, color); x-=4; y+=4; z-=4; color+=100; }}void testroundrects() {
tft.fillScreen(BLACK); int color = 100; int i; int t; for(t = 0 ; t <= 4; t+=1) {
int x = 0; int y = 0; int w = tft.width()-2; int h = tft.height()-2; for(i = 0 ; i <= 16; i+=1) {
tft.drawRoundRect(x, y, w, h, 5, color); x+=2; y+=3; w-=4; h-=6; color+=1100; } color+=100; }}void tftPrintTest() {
tft.setTextWrap(false); tft.fillScreen(BLACK); tft.setCursor(0, 30); tft.setTextColor(RED); tft.setTextSize(1); tft.println("Hello World!"); tft.setTextColor(YELLOW); tft.setTextSize(2); tft.println("Hello World!"); tft.setTextColor(GREEN); tft.setTextSize(3); tft.println("Hello World!"); tft.setTextColor(BLUE); tft.setTextSize(4); tft.print(1234.567); delay(1500); tft.setCursor(0, 0); tft.fillScreen(BLACK); tft.setTextColor(WHITE); tft.setTextSize(0); tft.println("Hello World!"); tft.setTextSize(1); tft.setTextColor(GREEN); tft.print(p, 6); tft.println(" Want pi?"); tft.println(" "); tft.print(8675309, HEX); // print 8,675,309 out in HEX! tft.println(" Print HEX!"); tft.println(" "); tft.setTextColor(WHITE); tft.println("Sketch has been"); tft.println("running for: "); tft.setTextColor(MAGENTA); tft.print(millis() / 1000); tft.setTextColor(WHITE); tft.print(" seconds.");}void mediabuttons() {
// play tft.fillScreen(BLACK); tft.fillRoundRect(25, 10, 78, 60, 8, WHITE); tft.fillTriangle(42, 20, 42, 60, 90, 40, RED); delay(500); // pause tft.fillRoundRect(25, 90, 78, 60, 8, WHITE); tft.fillRoundRect(39, 98, 20, 45, 5, GREEN); tft.fillRoundRect(69, 98, 20, 45, 5, GREEN); delay(500); // play color tft.fillTriangle(42, 20, 42, 60, 90, 40, BLUE); delay(50); // pause color tft.fillRoundRect(39, 98, 20, 45, 5, RED); tft.fillRoundRect(69, 98, 20, 45, 5, RED); // play color tft.fillTriangle(42, 20, 42, 60, 90, 40, GREEN);}

效果图

在这里插入图片描述

彩蛋

全都完成后才发现另外一个库叫TFT_eSPI,据说比Arduino_ST7789速度快易用。。哈哈哈 下一篇写这个吧,另外想做一个模仿人脸表情的动画和百度语音接口配合使用。应该挺有趣吧。

在这里插入图片描述

参考文献

【1】arduinoUno和屏的调试,提供了st7789库和图形库 https://simple-circuit.com/arduino-st7789-ips-tft-display-example/

【2】Github的库 https://github.com/adafruit/Adafruit-ST7735-Library、
【3】Github的图形库 https://github.com/adafruit/Adafruit-GFX-Library
【4】nodeMCU or Arduino Nano和ST7789控制芯片的TFT液晶
https://thesolaruniverse.wordpress.com/2019/12/24/connecting-a-240x240-tft-display-with-st7789-controller-with-a-nodemcu-esp8266-or-an-arduino-nano/
【5】T-Watch. Getting started with the TFT_eSPI library. Display text, shapes, touch detection
https://diyprojects.io/ttgo-t-watch-get-started-esp32-tft_espi-library/#.YAmHiegzZPY
【6】tft_espi库的讲解视频
https://www.youtube.com/watch?v=HoZhgNcJjNA
【7】tft_espi库的github地址: https://github.com/Bodmer/TFT_eSPI
【8】16M AVR版的极速版 st7789库 https://github.com/cbm80amiga/Arduino_ST7789_Fast
【9】硬件监视代码 https://github.com/cbm80amiga/ST7789_HWMonitor
【10】Pi zero + 1.3inch LCD movie Player https://www.youtube.com/watch?v=gyvl_FI8kAg

转载地址:https://blog.csdn.net/happyjoey217/article/details/112692645 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:vscode安装platformio
下一篇:PCA9685版OTTO开源跳舞机器人

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年08月22日 01时35分16秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章