Skip to content

Instantly share code, notes, and snippets.

@katsuyoshi
Last active January 30, 2023 05:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save katsuyoshi/8cfe58c5cfe463f33643b0abd85cd23d to your computer and use it in GitHub Desktop.
Save katsuyoshi/8cfe58c5cfe463f33643b0abd85cd23d to your computer and use it in GitHub Desktop.
M5Stamp picoで1.9inch Segment e-Paper Moduleのサンプルプログラムを試して見る。からの温湿度計に
#include <Wire.h>
#include <stdlib.h>
#include "EPD_1in9.h"
//////////////////////////////////////full screen update LUT////////////////////////////////////////////
unsigned char DSPNUM_1in9_on[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, }; // all black
unsigned char DSPNUM_1in9_off[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; // all white
unsigned char DSPNUM_1in9_WB[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; // All black font
unsigned char DSPNUM_1in9_W0[] = {0x00, 0xbf, 0x1f, 0xbf, 0x1f, 0xbf, 0x1f, 0xbf, 0x1f, 0xbf, 0x1f, 0xbf, 0x1f, 0x00, 0x00, }; // 0
unsigned char DSPNUM_1in9_W1[] = {0xff, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, }; // 1
unsigned char DSPNUM_1in9_W2[] = {0x00, 0xfd, 0x17, 0xfd, 0x17, 0xfd, 0x17, 0xfd, 0x17, 0xfd, 0x17, 0xfd, 0x37, 0x00, 0x00, }; // 2
unsigned char DSPNUM_1in9_W3[] = {0x00, 0xf5, 0x1f, 0xf5, 0x1f, 0xf5, 0x1f, 0xf5, 0x1f, 0xf5, 0x1f, 0xf5, 0x1f, 0x00, 0x00, }; // 3
unsigned char DSPNUM_1in9_W4[] = {0x00, 0x47, 0x1f, 0x47, 0x1f, 0x47, 0x1f, 0x47, 0x1f, 0x47, 0x1f, 0x47, 0x3f, 0x00, 0x00, }; // 4
unsigned char DSPNUM_1in9_W5[] = {0x00, 0xf7, 0x1d, 0xf7, 0x1d, 0xf7, 0x1d, 0xf7, 0x1d, 0xf7, 0x1d, 0xf7, 0x1d, 0x00, 0x00, }; // 5
unsigned char DSPNUM_1in9_W6[] = {0x00, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0x00, 0x00, }; // 6
unsigned char DSPNUM_1in9_W7[] = {0x00, 0x21, 0x1f, 0x21, 0x1f, 0x21, 0x1f, 0x21, 0x1f, 0x21, 0x1f, 0x21, 0x1f, 0x00, 0x00, }; // 7
unsigned char DSPNUM_1in9_W8[] = {0x00, 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x3f, 0x00, 0x00, }; // 8
unsigned char DSPNUM_1in9_W9[] = {0x00, 0xf7, 0x1f, 0xf7, 0x1f, 0xf7, 0x1f, 0xf7, 0x1f, 0xf7, 0x1f, 0xf7, 0x1f, 0x00, 0x00, }; // 9
unsigned char VAR_Temperature=20;
/******************************************************************************
function : GPIO Init
parameter:
******************************************************************************/
void GPIOInit(void)
{
pinMode(EPD_BUSY_PIN, INPUT);
pinMode(EPD_RST_PIN, OUTPUT);
}
/******************************************************************************
function : Software reset
parameter:
******************************************************************************/
void EPD_1in9_Reset(void)
{
digitalWrite(EPD_RST_PIN, 1);
delay(200);
digitalWrite(EPD_RST_PIN, 0);
delay(20);
digitalWrite(EPD_RST_PIN, 1);
delay(200);
}
/******************************************************************************
function : send command
parameter:
Reg : Command register
******************************************************************************/
void EPD_1in9_SendCommand(unsigned char Reg)
{
Wire.beginTransmission(adds_com);
Wire.write(Reg);
Wire.endTransmission(false);
}
/******************************************************************************
function : send data
parameter:
Data : Write data
******************************************************************************/
void EPD_1in9_SendData(unsigned char Data)
{
Wire.beginTransmission(adds_data);
Wire.write(Data);
Wire.endTransmission();
}
/******************************************************************************
function : read command
parameter:
Reg : Command register
******************************************************************************/
unsigned char EPD_1in9_readCommand(unsigned char Reg)
{
unsigned char a;
Wire.beginTransmission(adds_com);
delay(10);
Wire.write(Reg);
a = Wire.read();
Wire.endTransmission();
return a;
}
/******************************************************************************
function : read data
parameter:
Data : Write data
******************************************************************************/
unsigned char EPD_1in9_readData(unsigned char Data)
{
unsigned char a;
Wire.beginTransmission(adds_data);
delay(10);
Wire.write(Data);
a = Wire.read();
Wire.endTransmission();
return a;
}
/******************************************************************************
function : Wait until the busy_pin goes LOW
parameter:
******************************************************************************/
void EPD_1in9_ReadBusy(void)
{
Serial.println("e-Paper busy");
delay(10);
while(1)
{ //=1 BUSY;
if(digitalRead(EPD_BUSY_PIN)==1)
break;
delay(1);
}
delay(10);
Serial.println("e-Paper busy release");
}
/*
# DU waveform white extinction diagram + black out diagram
# Bureau of brush waveform
*/
void EPD_1in9_lut_DU_WB(void)
{
Wire.beginTransmission(adds_com);
Wire.write(0x82);
Wire.write(0x80);
Wire.write(0x00);
Wire.write(0xC0);
Wire.write(0x80);
Wire.write(0x80);
Wire.write(0x62);
Wire.endTransmission();
}
/*
# GC waveform
# The brush waveform
*/
void EPD_1in9_lut_GC(void)
{
Wire.beginTransmission(adds_com);
Wire.write(0x82);
Wire.write(0x20);
Wire.write(0x00);
Wire.write(0xA0);
Wire.write(0x80);
Wire.write(0x40);
Wire.write(0x63);
Wire.endTransmission();
}
/*
# 5 waveform better ghosting
# Boot waveform
*/
void EPD_1in9_lut_5S(void)
{
Wire.beginTransmission(adds_com);
Wire.write(0x82);
Wire.write(0x28);
Wire.write(0x20);
Wire.write(0xA8);
Wire.write(0xA0);
Wire.write(0x50);
Wire.write(0x65);
Wire.endTransmission();
}
/*
# temperature measurement
# You are advised to periodically measure the temperature and modify the driver parameters
# If an external temperature sensor is available, use an external temperature sensor
*/
void EPD_1in9_Temperature(void)
{
Wire.beginTransmission(adds_com);
if( VAR_Temperature < 10 )
{
Wire.write(0x7E);
Wire.write(0x81);
Wire.write(0xB4);
}
else
{
Wire.write(0x7E);
Wire.write(0x81);
Wire.write(0xB4);
}
Wire.endTransmission();
delay(10);
Wire.beginTransmission(adds_com);
Wire.write(0xe7); // Set default frame time
// Set default frame time
if(VAR_Temperature<5)
Wire.write(0x31); // 0x31 (49+1)*20ms=1000ms
else if(VAR_Temperature<10)
Wire.write(0x22); // 0x22 (34+1)*20ms=700ms
else if(VAR_Temperature<15)
Wire.write(0x18); // 0x18 (24+1)*20ms=500ms
else if(VAR_Temperature<20)
Wire.write(0x13); // 0x13 (19+1)*20ms=400ms
else
Wire.write(0x0e); // 0x0e (14+1)*20ms=300ms
Wire.endTransmission();
}
/*
# Note that the size and frame rate of V0 need to be set during initialization,
# otherwise the local brush will not be displayed
*/
void EPD_1in9_init(void)
{
unsigned char i = 0;
EPD_1in9_Reset();
delay(100);
Wire.beginTransmission(adds_com);
Wire.write(0x2B); // POWER_ON
Wire.endTransmission();
delay(10);
Wire.beginTransmission(adds_com);
Wire.write(0xA7); // boost
Wire.write(0xE0); // TSON
Wire.endTransmission();
delay(10);
EPD_1in9_Temperature();
}
void EPD_1in9_Write_Screen( unsigned char *image)
{
Wire.beginTransmission(adds_com);
Wire.write(0xAC); // Close the sleep
Wire.write(0x2B); // turn on the power
Wire.write(0x40); // Write RAM address
Wire.write(0xA9); // Turn on the first SRAM
Wire.write(0xA8); // Shut down the first SRAM
Wire.endTransmission();
Wire.beginTransmission(adds_data);
for(char j = 0 ; j<15 ; j++ )
Wire.write(image[j]);
Wire.write(0x00);
Wire.endTransmission();
Wire.beginTransmission(adds_com);
Wire.write(0xAB); // Turn on the second SRAM
Wire.write(0xAA); // Shut down the second SRAM
Wire.write(0xAF); // display on
Wire.endTransmission();
EPD_1in9_ReadBusy();
//delay(2000);
Wire.beginTransmission(adds_com);
Wire.write(0xAE); // display off
Wire.write(0x28); // HV OFF
Wire.write(0xAD); // sleep in
Wire.endTransmission();
}
void EPD_1in9_Write_Screen1( unsigned char *image)
{
Wire.beginTransmission(adds_com);
Wire.write(0xAC); // Close the sleep
Wire.write(0x2B); // turn on the power
Wire.write(0x40); // Write RAM address
Wire.write(0xA9); // Turn on the first SRAM
Wire.write(0xA8); // Shut down the first SRAM
Wire.endTransmission();
Wire.beginTransmission(adds_data);
for(char j = 0 ; j<15 ; j++ )
Wire.write(image[j]);
Wire.write(0x03);
Wire.endTransmission();
Wire.beginTransmission(adds_com);
Wire.write(0xAB); // Turn on the second SRAM
Wire.write(0xAA); // Shut down the second SRAM
Wire.write(0xAF); // display on
Wire.endTransmission();
EPD_1in9_ReadBusy();
//delay(2000);
Wire.beginTransmission(adds_com);
Wire.write(0xAE); // display off
Wire.write(0x28); // HV OFF
Wire.write(0xAD); // sleep in
Wire.endTransmission();
}
void EPD_1in9_sleep(void)
{
Wire.beginTransmission(adds_com);
Wire.write(0x28); // POWER_OFF
EPD_1in9_ReadBusy();
Wire.write(0xAC); // DEEP_SLEEP
Wire.endTransmission();
delay(2000);
// digitalWrite(EPD_RST_PIN, 0);
}
#ifndef _EPD_1in9_H_
#define _EPD_1in9_H_
#include <Arduino.h>
#include <Wire.h>
#include <stdlib.h>
// address
#define adds_com 0x3C
#define adds_data 0x3D
#define EPD_BUSY_PIN 19
#define EPD_RST_PIN 18
extern unsigned char DSPNUM_1in9_on[];
extern unsigned char DSPNUM_1in9_off[];
extern unsigned char DSPNUM_1in9_WB[];
extern unsigned char DSPNUM_1in9_W0[];
extern unsigned char DSPNUM_1in9_W1[];
extern unsigned char DSPNUM_1in9_W2[];
extern unsigned char DSPNUM_1in9_W3[];
extern unsigned char DSPNUM_1in9_W4[];
extern unsigned char DSPNUM_1in9_W5[];
extern unsigned char DSPNUM_1in9_W6[];
extern unsigned char DSPNUM_1in9_W7[];
extern unsigned char DSPNUM_1in9_W8[];
extern unsigned char DSPNUM_1in9_W9[];
void GPIOInit(void);
void EPD_1in9_Reset(void);
void EPD_1in9_SendCommand(unsigned char Reg);
void EPD_1in9_SendData(unsigned char Data);
unsigned char EPD_1in9_readCommand(unsigned char Reg);
unsigned char EPD_1in9_readData(unsigned char Data);
void EPD_1in9_ReadBusy(void);
void EPD_1in9_lut_DU_WB(void);
void EPD_1in9_lut_GC(void);
void EPD_1in9_lut_5S(void);
void EPD_1in9_Temperature(void);
void EPD_1in9_init(void);
void EPD_1in9_Write_Screen(unsigned char *image);
void EPD_1in9_Write_Screen1(unsigned char *image);
void EPD_1in9_sleep(void);
#endif
#include <Arduino.h>
#include "EPD_1in9.h"
#include <M5Unified.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define I2C_SDA_PIN 21
#define I2C_SCL_PIN 22
#define DHTPIN 26 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11 // DHT 11
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN);
/*
GPIOInit();
EPD_1in9_init();
EPD_1in9_lut_5S();
EPD_1in9_Write_Screen(DSPNUM_1in9_off);
delay(500);
EPD_1in9_lut_GC();
EPD_1in9_Write_Screen1(DSPNUM_1in9_on);
delay(500);
EPD_1in9_Write_Screen(DSPNUM_1in9_off);
delay(500);
EPD_1in9_lut_DU_WB();
EPD_1in9_Write_Screen(DSPNUM_1in9_W0);
delay(500);
EPD_1in9_Write_Screen(DSPNUM_1in9_W1);
delay(500);
EPD_1in9_Write_Screen(DSPNUM_1in9_W2);
delay(500);
EPD_1in9_Write_Screen(DSPNUM_1in9_W3);
delay(500);
EPD_1in9_Write_Screen(DSPNUM_1in9_W4);
delay(500);
EPD_1in9_Write_Screen(DSPNUM_1in9_W5);
delay(500);
EPD_1in9_Write_Screen(DSPNUM_1in9_W6);
delay(500);
EPD_1in9_Write_Screen(DSPNUM_1in9_W7);
delay(500);
EPD_1in9_Write_Screen(DSPNUM_1in9_W8);
delay(500);
EPD_1in9_Write_Screen(DSPNUM_1in9_W9);
delay(500);
EPD_1in9_Write_Screen(DSPNUM_1in9_WB);
delay(500);
EPD_1in9_sleep();
//Serial.end();
//Wire.end();
*/
dht.begin();
Serial.println(F("DHTxx Unified Sensor Example"));
// Print temperature sensor details.
sensor_t sensor;
dht.temperature().getSensor(&sensor);
Serial.println(F("------------------------------------"));
Serial.println(F("Temperature Sensor"));
Serial.print (F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print (F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("°C"));
Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("°C"));
Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("°C"));
Serial.println(F("------------------------------------"));
// Print humidity sensor details.
dht.humidity().getSensor(&sensor);
Serial.println(F("Humidity Sensor"));
Serial.print (F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print (F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("%"));
Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("%"));
Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("%"));
Serial.println(F("------------------------------------"));
// Set delay between sensor readings based on sensor details.
delayMS = sensor.min_delay / 1000;
}
void loop() {
// Delay between measurements.
delay(delayMS);
// Get temperature event and print its value.
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println(F("Error reading temperature!"));
}
else {
Serial.print(F("Temperature: "));
Serial.print(event.temperature);
Serial.println(F("°C"));
}
// Get humidity event and print its value.
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println(F("Error reading humidity!"));
}
else {
Serial.print(F("Humidity: "));
Serial.print(event.relative_humidity);
Serial.println(F("%"));
}
}
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:m5stack-atom]
platform = espressif32
board = m5stack-atom
framework = arduino
lib_deps = m5stack/M5Unified@^0.1.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment