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、
- 点击“文件”选则“首选项。
- 添加Wemos D1 Mini开发板的josn文件
- 弹出的首选项中点击下图所示的按钮打开开发板管理器页面
- 将”http://arduino.esp8266.com/stable/package_esp8266com_index.json“复制到弹出的页面中,(Arduino IDE自带的开发板并不多。如果想要扩展它支持其他的开发板只需要用这个方式再管理器中进行添加就好。而每个开发板的josn之间用分号隔开即可。粘贴好后,点击”好“ 经过上一步后,再返回的首选相页面点击再次点击”好“进行确认。
- 在开发板管理器中添加开发板 如下图所示一次点开:”工具”->“开发板xxxx”->"开发板管理器“ 在弹出的页面搜索栏中输入”esp“后,稍等下,下面就会列出相关的开发板。按照下图所示的方法,点击”安装“进行该类开发板的安装。
库安装
Arduino_ST7789.h库安装
- 打开上面的地址按照下图方式下载库的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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年08月22日 01时35分16秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JSP技术的使用——好像过时了唉。。。。。
2019-05-24
MVC模式概述
2019-05-24
Web之过滤器Filter
2019-05-24
JSON和AJAX
2019-05-24
web之监听器listener
2019-05-24
类加载器
2019-05-24
数据库设计
2019-05-24
Java虚拟机的内存分配和运行机制(粗谈)
2019-05-24
web开发之BaseServlet的使用
2019-05-24
初识Maven
2019-05-24
Maven分模块构建项目
2019-05-24
MyBatis初识
2019-05-24
Mybatis-高级应用
2019-05-24
MyBatis【进阶详解】
2019-05-24
面试题集锦(七)
2019-05-24
结构型设计模式——代理设计模式
2019-05-24
注解开发——Spring整合dao/service/web
2019-05-24
Git的应用
2019-05-24
架构的演进
2019-05-24
Elastic-Job的基础使用
2019-05-24