Eink

From 太極
Revision as of 19:05, 22 February 2023 by Brb (talk | contribs) (→‎Misc)
Jump to navigation Jump to search

Resources

Waveshare

  • Waveshare hardware connection from Github (4 SPI pins are needed). The first number (eg RES white -> 11) below is from a continuous sequence order (physical location) and the 2nd number (eg BCM: 17) is GPIO number (or BCM pin number).
        EPD         =>  Raspberry Pi
      * VCC  red    ->  3.3
      * GND  black  ->  GND
      * DIN  blue   ->  19 MOSI
      * CLK  yellow ->  23 SCLK
      * CS   orange ->  24 (Physical, BCM: CE0, 8)
      * D/C  green  ->  22 (Physical, BCM: 25)
      * RES  white  ->  11 (Physical, BCM: 17)
      * BUSY purple ->  18 (Physical, BCM: 24)
    
    vcc red 1 3v3
    gnd black 6 ground
    rst white 11 gpio17
    busy purple 18 gpio24
    din blue 19 gpio10 (spi mosi)
    dc green 22 gpio025
    clk yellow 23 gpio11 (spi sck)
    cs orange 24 gpio08 (spi ce0)
  • Test Waveshare ePaper (eInk) 2.7” inch 264×176 SPI screen on Raspberry Pi in Python. Refresh time 6s.
    • https://www.waveshare.com/wiki/2.7inch_e-Paper_HAT and github example. Five steps were needed to show a screen. 1. Reverse 2. White 3. Black 4. Reverse 5. Normal.
    • Clock and weather display for E-Paper 2.7 inch display from Waveshare for Raspberry Pi 3. The screen will refresh every minute (use CPU). It does work but the temperature is in C not F. To fix that, open "epaper.py" file, change the variable "DARK_SKY_UNITS" from "si" to "auto"; see Doc from darksky.net. The cpu and memory usage shown on the screen is different from what I saw from the result of 'htop' (over estimate). Note that darksky.net web information is incredible friendly already. Apple acquires Dark Sky weather app (3/30/2020).
      sudo apt-get install libjpeg-dev
      pip install -r requirements.txt
      chmod +x run.sh
      ./run.sh  # DO NOT ADD sudo
      # terminal will show messages from the code. For example, press button 4
      # [Button] Btn #4 pressed
      # [Button] Btn press handled.
      # App is shuting down.
      # Display shutdown icon ...
      # [Epaper] Display.
      # ... done.
      # calling exit 0
      
    • Once we put the program in a service, it is tricky to change the settings. It is best to stop the service before doing any change; sudo systemctl stop epaper.service . Then we need to delete all auto-generated *.pyc file; find . -iname "*.pyc" -delete. Now we can start the service again; sudo systemctl start epaper.service .
    • If the program was run through the service, press button 4 will shut down the code but the script will be launched again.
    • Understand the code. Search shutting_down, shutdown_hook, pressed keywords
  • Waveshare ePaper 4.2 inch 400 × 300. Refresh time 4s. But it took 12.7 seconds to display a bmp file from my observation. The image does not disappear after one year without power:)
    • https://github.com/waveshare/e-Paper/tree/master/2.7inch_e-paper_code/RaspberryPi/python3 shows what software we need to install.
      sudo apt-get install python-pip 
      sudo pip install RPi.GPIO
      sudo pip install spidev
      sudo apt-get install ttf-wqy-zenhei ttf-wqy-microhei
    • http://www.waveshare.net/wiki/4.2inch_e-Paper_Module. Click on 示例程序 to download 4.2inch_e-paper_code.7z.
      wget http://www.waveshare.net/w/upload/8/80/4.2inch_e-paper_code.7z
      mkdir 4.2inch_e-paper_code
      cd 4.2inch_e-paper_code
      sudo apt-get install p7zip-full
      # It seems the "e" option from 7za will not keep the directory structure properly
      # We need to use the "x" option.
      7za x ../4.2inch_e-paper_code.7z # https://superuser.com/a/379594
      cd RaspberryPi/python3
      Then follow the 用户手册/manual (useful) to install required software and run the demo. Note when installing the Pillow library (sudo pip3 install Pillow), I got an error: The headers or library files could not be found for jpeg. To fix the problem, try
      # The original instruction in the manual does not help
      # sudo apt install libopenjp2-7-dev 
      sudo apt-get install libjpeg-dev
      Don't forget to enable SPI (sudo raspi-config) before running "sudo python main.py". I actually got another error complaining font24 = ImageFont.truetype('/usr/share/fonts/truetype/wqy/wqy-microhei.ttc', 24). Follow the suggestion 2.13 epaper display problem and install the required font by sudo apt-get install fonts-wqy-microhei, I am able to run the demo program.
In order to resize an image to 400x300 and monotone scale (see the last page of the manual), we can use
sudo apt-get install imagemagick
wget http://worldartsme.com/images/spring-charlie-brown-clipart-1.jpg -O spring.jpg
convert spring.jpg -format bmp -resize 400x300! -monochrome 4in2_spring.bmp
cp 4in2.bmp 4in2_original.bmp
cp 4in2_spring.bmp 4in2.bmp
sudo python3 main.py
# notice the exclamation mark, "!". 
# See http://www.imagemagick.org/script/command-line-processing.php#geometry
  • Raspberry pi e-paper dashboard with R. It works on Raspberry Pi zero and 4.2" e-paper with appropriate changes. The following provides a solution to create a slideshow on the epaper.
    # infinite loop; require many many times of Ctrl+C to stop the execution 
    while true; do for f in *.jpg; do echo $f; convert -monochrome -resize 400x300\! \
          $f screen-output.bmp; python3 display.py; done; done
    
    # 2 loops. Not stable even on the 1st iteration. 
    # The 'python3 display.py' may not do anything (according to ''htop'').
    for i in {1..2}; do echo iteration $i; for f in *.jpg; do echo $f; \
          convert -monochrome -resize 400x300\! $f screen-output.bmp; \
          python3 display.py; done; done
    
    # R. Works fine even with iterations
    for(i in 1:4) for(f in list.files(pattern = "*.jpg")) { 
      cat(f, "\n")
      system(paste("convert -monochrome -resize 400x300!", f, "screen-output.bmp"))
      py_run_file("display.py") 
    }
    

    Unfortunately the Chinese characters appear blurry compared to the ones generated from Python code.

    If we save the R script to a file, we can launch it by "Rscript XXXX.R" . We can send the job to the background (Ctrl+z, bg) and then quit the ssh connection.

  • E-paper Weather Display on 7.5 inch display. The code is simple. See my mod for 4.2 inch display. The free plan on openweathermap allows 60 calls per min.
  • WeatherBit.io is used by inxi -W command

ESP32

ESP32 E-Paper Weather Display

Misc

Dark Sky

Dark Sky Is Now WeatherKit, Android Apps Could Come Soon