目录
前言
相关arduino 全部分类:
https://blog.csdn.net/freewebsys/category_8799254.html
本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/104592387
未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
1,关于arduino 使用SPI 驱动墨水屏
使用ESP8266,连接 good display 2.9 寸墨水屏 GDEW029T5 上,然后使用DESPI-C02驱动,通过SPI总线通讯,显示Demo画面,作为电子价演示,最好的了。
在线下零售有重要的地位呢。可以获得商品的价格信息,调整商品价格。
方便盘点,货品管理。数据化之后会产生很大价值呢。但是网上的资料比较少。
自己也不是研究电子的,使用Arduino 做开发吧。这边使用ESP8266 研究。
可以直接连接 WIFI 做数据更新。价格联动,也是超级方便呢。
这个是墨水屏显示器。
http://www.e-paper-display.cn/products_detail/productId=290.html
2,使用ESP8266接线
在网络上面搜索了半天,没有人给给方案,还是参考 GITHub 上面的项目找到的。
https://github.com/ZinggJM/GxEPD
这个哥们估计是专门做的,还写了支持好多设备的:
ESP8266, ESP32 , STM32 systems, Arduino Due e.g. have enough free RAM for full graphics buffer.
我这边使用的是ESP8266 的小开发板子。和DESPI-C02 ,GDEW029T5 这两个设备。
接线图如下:标准的 SPI 接线。从源代码中看到的。
// mapping suggestion from Waveshare SPI e-Paper to generic ESP8266
// BUSY -> GPIO4, RST -> GPIO2, DC -> GPIO0, CS -> GPIO15, CLK -> GPIO14, DIN -> GPIO13, GND -> GND, 3.3V -> 3.3V
// mapping suggestion for ESP32, e.g. LOLIN32, see .../variants/.../pins_arduino.h for your board
// NOTE: there are variants with different pins for SPI ! CHECK SPI PINS OF YOUR BOARD
// BUSY -> 4, RST -> 16, DC -> 17, CS -> SS(5), CLK -> SCK(18), DIN -> MOSI(23), GND -> GND, 3.3V -> 3.3V
// new mapping suggestion for STM32F1, e.g. STM32F103C8T6 "BluePill"
// BUSY -> A1, RST -> A2, DC -> A3, CS-> A4, CLK -> A5, DIN -> A7
// mapping suggestion for AVR, UNO, NANO etc.
// BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11
给了 ESP32 和 ESP8266 的接线方法 arduino 也一样。
依赖 Adafruit-GFX 库,否则报错:
/arduino/libraries/GxEPD/src/GxEPD.h:19:26: fatal error: Adafruit_GFX.h: No such file or directory
"SPI.h" 对应多个库
#include <Adafruit_GFX.h>
然后下载库:特别重要。两个都要下载。
arduino/libraries 下载代码:
git clone https://github.com/ZinggJM/GxEPD.git
git clone https://github.com/adafruit/Adafruit-GFX-Library.git
然后 ESP8266 代码:
// GxEPD_Example : test example for e-Paper displays from Waveshare and from Dalian Good Display Inc.
//
// Created by Jean-Marc Zingg based on demo code from Good Display,
// available on http://www.e-paper-display.com/download_list/downloadcategoryid=34&isMode=false.html
//
// The e-paper displays are available from:
//
// https://www.aliexpress.com/store/product/Wholesale-1-54inch-E-Ink-display-module-with-embedded-controller-200x200-Communicate-via-SPI-interface-Supports/216233_32824535312.html
//
// http://www.buy-lcd.com/index.php?route=product/product&path=2897_8363&product_id=35120
// or https://www.aliexpress.com/store/product/E001-1-54-inch-partial-refresh-Small-size-dot-matrix-e-paper-display/600281_32815089163.html
//
// Supporting Arduino Forum Topics:
// Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0
// Good Dispay ePaper for Arduino : https://forum.arduino.cc/index.php?topic=436411.0
// mapping suggestion from Waveshare SPI e-Paper to generic ESP8266
// BUSY -> GPIO4, RST -> GPIO2, DC -> GPIO0, CS -> GPIO15, CLK -> GPIO14, DIN -> GPIO13, GND -> GND, 3.3V -> 3.3V
// mapping suggestion for ESP32, e.g. LOLIN32, see .../variants/.../pins_arduino.h for your board
// NOTE: there are variants with different pins for SPI ! CHECK SPI PINS OF YOUR BOARD
// BUSY -> 4, RST -> 16, DC -> 17, CS -> SS(5), CLK -> SCK(18), DIN -> MOSI(23), GND -> GND, 3.3V -> 3.3V
// include library, include base class, make path known
#include <GxEPD.h>
#include <GxGDEW029T5/BitmapExamples.h> // 2.9" b/w IL0373
#include <GxGDEW029T5/GxGDEW029T5.h> // 2.9" b/w IL0373
// FreeFonts from Adafruit_GFX
#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>
#if defined(ESP8266)
// for SPI pin definitions see e.g.:
// C:\Users\xxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\variants\generic\common.h
GxIO_Class io(SPI, /*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2); // arbitrary selection of D3(=0), D4(=2), selected for default of GxEPD_Class
GxEPD_Class display(io, /*RST=D4*/ 2, /*BUSY=D2*/ 4); // default selection of D4(=2), D2(=4)
// Heltec E-Paper 1.54" b/w without RST, BUSY
//GxEPD_Class display(io, /*RST=D4*/ -1, /*BUSY=D2*/ -1); // no RST, no BUSY
// Waveshare e-Paper ESP8266 Driver Board
//GxIO_Class io(SPI, 15, 4, 5);
//GxEPD_Class display(io, 5, 16);
#elif defined(ESP32)
// for SPI pin definitions see e.g.:
// C:\Users\xxx\Documents\Arduino\hardware\espressif\esp32\variants\lolin32\pins_arduino.h
GxIO_Class io(SPI, /*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16); // arbitrary selection of 17, 16
GxEPD_Class display(io, /*RST=*/ 16, /*BUSY=*/ 4); // arbitrary selection of (16), 4
#endif
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println("setup");
display.init(115200); // enable diagnostic output on Serial
Serial.println("setup done");
}
void loop()
{
showBitmapExample();
delay(2000);
display.drawCornerTest();
delay(2000);
display.drawPaged(showFontCallback);
delay(10000);
}
#if defined(_GxGDEW029T5_H_)
void showBitmapExample()
{
display.drawExampleBitmap(BitmapExample1, sizeof(BitmapExample1));
delay(5000);
display.drawExampleBitmap(BitmapExample2, sizeof(BitmapExample2));
delay(5000);
display.drawExampleBitmap(BitmapExample3, sizeof(BitmapExample3));
delay(5000);
display.fillScreen(GxEPD_WHITE);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
delay(5000);
// showBoat();
}
#endif
void showFont(const char name[], const GFXfont* f)
{
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(f);
display.setCursor(0, 0);
display.println();
display.println(name);
display.println(" !\"#$%&'()*+,-./");
display.println("0123456789:;<=>?");
display.println("@ABCDEFGHIJKLMNO");
display.println("PQRSTUVWXYZ[\\]^_");
#if defined(HAS_RED_COLOR)
display.setTextColor(GxEPD_RED);
#endif
display.println("`abcdefghijklmno");
display.println("pqrstuvwxyz{|}~ ");
display.update();
delay(5000);
}
//show font text
void showFontCallback()
{
const char* name = "FreeMonoBold9pt7b";
const GFXfont* f = &FreeMonoBold9pt7b;
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(f);
display.setCursor(0, 0);
display.println();
display.println(name);
display.println(" !\"#$%&'()*+,-./");
display.println("0123456789:;<=>?");
display.println("@ABCDEFGHIJKLMNO");
display.println("PQRSTUVWXYZ[\\]^_");
#if defined(HAS_RED_COLOR)
display.setTextColor(GxEPD_RED);
#endif
display.println("`abcdefghijklmno");
display.println("pqrstuvwxyz{|}~ ");
}
void drawCornerTest()
{
display.drawCornerTest();
delay(5000);
uint8_t rotation = display.getRotation();
for (uint16_t r = 0; r < 4; r++)
{
display.setRotation(r);
display.fillScreen(GxEPD_WHITE);
display.fillRect(0, 0, 8, 8, GxEPD_BLACK);
display.fillRect(display.width() - 18, 0, 16, 16, GxEPD_BLACK);
display.fillRect(display.width() - 25, display.height() - 25, 24, 24, GxEPD_BLACK);
display.fillRect(0, display.height() - 33, 32, 32, GxEPD_BLACK);
display.update();
delay(5000);
}
display.setRotation(rotation); // restore
}
需要注意 图片文件在:
#include <GxGDEW029T5/BitmapExamples.h> // 2.9" b/w IL0373
#include <GxGDEW029T5/GxGDEW029T5.h> // 2.9" b/w IL0373
这里里面都是 Bitmap 的数据格式。之支持这样的图片展示到墨水屏上面。
还支持直接展示文字。和字体。
同时是墨水屏嘛,关闭了电源也是可以使用的。
3,总结
arduino 现在已经非常的成熟了,是一个非常成熟的解决方案了。
这次终于把墨水屏展示完成了,从同事那里借来的墨水屏显示器,自己调试下。
这个还是超级贵的。一套下来快小100 了。不过自己打算买一个 LILyGO的 墨水屏。
https://item.taobao.com/item.htm?id=592727637336
快到货了下次准备研究这个,价格便宜,就是稍微小了点。2.4寸的。而且还带 ESP32 主板。
超级实惠呢。不是卖货的!不管售后服务,坏了别找我。
本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/104592387
博主地址是:https://blog.csdn.net/freewebsys