2021年4月7日水曜日

Raspberry Pi Zero上のFlaskで、キャラクタ液晶ディスプレイモジュールにテキストを表示するREST APIを作成する

Raspberry Pi Zero上のFlaskで、キャラクタ液晶ディスプレイモジュールにテキストを表示するREST APIを作成するには、以下の手順を実行します。

開発手順

1. pipenvの導入
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. smbusモジュールとflaskがインストールされた仮想環境作成
pipenvを使用する場合は以下のコマンドで、smbusとflask用の仮想環境を作成します。
mkdir -p ~/smbus_flask

cd ~/smbus_flask

pipenv --python 3

pipenv install flask smbus

pipenv shell
3. Flask REST APIアプリケーションの作成 /displayに以下のパラメータを渡すとキャラクタ液晶ディスプレイモジュールに表示するコードを実装します。 line1 → 1行目に表示する文字列 line2 → 2行目に表示する文字列 app.py
from flask import Flask, jsonify, request
import smbus
import time

i2c = smbus.SMBus(1)
addr_lcd=0x3e

# Initialize
# Function Set
i2c.write_byte_data(addr_lcd, 0x00, 0x38)
time.sleep(0.01)

# Function Set
i2c.write_byte_data(addr_lcd, 0x00, 0x39)
time.sleep(0.01)

# Internal OSC frequency
i2c.write_byte_data(addr_lcd, 0x00, 0x14)
time.sleep(0.01)

# Contrast set
i2c.write_byte_data(addr_lcd, 0x00, 0x70)
time.sleep(0.01)

# Power/ICON/Constrast control
i2c.write_byte_data(addr_lcd, 0x00, 0x56)
time.sleep(0.01)

# Follower control
i2c.write_byte_data(addr_lcd, 0x00, 0x6c)
time.sleep(0.01)

# Function set
i2c.write_byte_data(addr_lcd, 0x00, 0x38)
time.sleep(0.01)

# Display ON/OFF control
i2c.write_byte_data(addr_lcd, 0x00, 0x0c)
time.sleep(0.01)

# Clear Display
i2c.write_byte_data(addr_lcd, 0x00, 0x01)
time.sleep(0.1)

app = Flask(__name__)

@app.route('/display')
def show_message():
  line1 = request.args.get('line1', '')
  line2 = request.args.get('line2', '')
  for ch in line1.encode("shift_jis"):
    i2c.write_byte_data(addr_lcd, 0x40, ch)
    time.sleep(0.01)

  i2c.write_byte_data(addr_lcd, 0x00, 0xc0)
  for ch in line2.encode("shift_jis"):
    i2c.write_byte_data(addr_lcd, 0x40, ch)
    time.sleep(0.01)
  return jsonify({"line1":line1, "line2":line2})

4. 実行
Flaskを実行するには、以下のコマンドを実行します。
export FLASK_APP=app.py

flask run -h 0.0.0.0

次に、ブラウザから以下のアドレスにアクセスして、2行分の文字列が表示されることを確認します。
http://<Raspberry Piのホスト名またはIPアドレス>:5000/display?line1=Hello&line2=コンニチハ

関連情報

・秋月電子のRaspberry Piキャラクタ液晶ディスプレイモジュール
https://akizukidenshi.com/catalog/g/gK-11354/

0 件のコメント:

コメントを投稿