ラベル MicroPython の投稿を表示しています。 すべての投稿を表示
ラベル MicroPython の投稿を表示しています。 すべての投稿を表示

2022年5月22日日曜日

Ubuntu 22.04にThonnyをインストールする

Thonnyは初心者向けPython開発環境です。Raspberry Pi Pico等をつないでMicroPythonのプログラミングを行うことも出来ます。

〇Thonnyの画面(Ubuntu 22.04)

Ubuntu Softwareによるインストール方法

1. Ubuntu Softwareを起動して、thonnyを検索します。

2.Thonnyのインストールボタンをクリックします

コマンドによるインストール方法

以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install thonny

関連情報

・Thonnyのプロジェクトサイト
https://thonny.org/

・Raspberry pi picoに関する記事はこちらを参照してください。

2022年4月20日水曜日

Raspberry Pi PicoとSHT31センサーで温度と湿度を計測する

Raspberry Pi PicoとSHT31センサーで温度と湿度を計測するには、以下の手順を実行します。

実行手順

1. Raspberry Pi PicoとSHT31センサーモジュールの配線
SHT31は秋月電子さんのSHT31モジュールを使用します。

・SHT31使用 高精度温湿度センサモジュールキット
https://akizukidenshi.com/catalog/g/gK-12125/

Raspberry PicoとSHT31モジュールの端子を以下のように接続します。
Raspberry Pi Pico pin36 : 3V3(OUT) → SHT31モジュール pin1 : VDD
Raspberry Pi Pico pin26 : GP20 SDA → SHT31モジュール pin2 : SDA
Raspberry Pi Pico pin27 : GP21 SCL → SHT31モジュール pin3 : SCL
Raspberry Pi Pico pin28 : GND → SHT31モジュール pin5 : GND

・回路図

・配線例

2. Thonnyを使用してSHT31ドライバーの導入
以下のgithubリポジトリから、sht31.pyをダウンロードします。
micropython-sht31
https://github.com/kfricke/micropython-sht31

sht31.pyのURL
https://github.com/kfricke/micropython-sht31/blob/master/sht31.py

/libフォルダが無い場合は、Thonny IDEでRaspberry Pi Pico側の/直下にlibフォルダを作成します(/lib)。そのあと、/libフォルダにsht31.pyをアップロードします。

3. 温度・湿度計測を行うプログラムの導入
以下のMicroPythonをRaspberry Pi Picoに保存し、Thonnyから実行します。実行すると温度と湿度が表示されます。
main.py
from machine import Pin, I2C
import sht31

i2c = I2C(0, scl=Pin(21), sda=Pin(20), freq =400000)
sensor = sht31.SHT31(i2c, addr=0x45)

(temperature, humidity) = sensor.get_temp_humi()
print("temp: {}".format(temperature))
print("humidity: {}".format(humidity))

関連情報

Windows10にPython3.9とThonnyをインストールする

・DHT11センサーを使用して温度・湿度を計測することも出来ます。
Raspberry Pi PicoでDHT11センサーを使用して温度・湿度を取得する

2021年7月24日土曜日

Raspberry Pi PicoにTPA2006使用D級アンプキットを接続して、wav形式のオーディオファイルを再生する

Raspberry Pi PicoにTPA2006使用D級アンプキットを接続して、wav形式のオーディオファイルを再生するには、以下の手順を実行します。

〇Raspberry Pi PicoとTPA2006使用D級アンプキット、スピーカーを接続した写真

開発手順

1. Raspberry Pi Pico以外に必要な部品の準備
以下の部品を準備します。
・TPA2006使用 超小型D級アンプキット
https://akizukidenshi.com/catalog/g/gK-08161/

・ダイナミックスピーカー 8Ω7W
https://akizukidenshi.com/catalog/g/gP-10366/

・単3電池4本が入る電池ボックス
 ※電池ボックスでは何でも良いのですが、取り外し可能にするために、以下の3つを使用しました。
 ・電池ボックス 単3×4本 スイッチ付 XHコネクタ付
 https://akizukidenshi.com/catalog/g/gP-12242/

 ・XHコネクタ ベース付ポスト トップ型 2P B2B-XH-A(LF)(SN
 https://akizukidenshi.com/catalog/g/gC-12247/

 ・16ホールユニバーサル基板(2.54mm)
 https://akizukidenshi.com/catalog/g/gP-02515/

2. 部品の接続・配線
以下の回路図のように各部品を配線します。

3. Raspberry Pi Picoに必要ライブラリのアップロード
/libフォルダが無い場合は、Thonny IDEでRaspberry Pi Pico側の/直下にlibフォルダを作成します(/lib)。
※Thonnyでのフォルダの作成・ファイルのアップロードに関しては、Raspberry Pi PicoでDHT11センサーを使用して温度・湿度を取得するを参照してください。

awesome-micropython-libプロジェクトのAudioから以下の2つのファイルをダウンロードして/libフォルダにアップロードします。
https://github.com/joeky888/awesome-micropython-lib/tree/master/Audio
chunk.py
wave.py

PicoAudioPWMプロジェクトから以下の3つのファイルをダウンロードして/libフォルダにアップロードします。
https://github.com/danjperron/PicoAudioPWM
myDMA.py
myPWM.py
wavePlayer.py

4. /soundsフォルダの作成と、wavファイルのアップロード
Raspberry Pi Pico側に/直下にsoundsフォルダを作成します(/sounds)。/soundsフォルダに再生したいwav形式のオーディオファイルをアップロードします。

5. プログラミングとオーディオ再生
以下のプログラムをmain.pyとして保存し、Thonny IDEから実行します。/soundsフォルダに配置したオーディオファイルが逐次再生されます。
import wavePlayer
import uos
player = wavePlayer.wavePlayer()

soundsFolder= "/sounds"

try:
    for file in uos.listdir(soundsFolder):
        print(soundsFolder + "/" + file)
        player.play(soundsFolder + "/" + file)
except KeyboardInterrupt:
    player.stop()

関連情報

OpenSCADとUltimaker Curaを使用してスピーカー用のケースを作成する

Raspberry Pi PicoでBME680センサーを使用して温度・湿度・気圧・ガスの値を取得する

2021年7月16日金曜日

Raspberry Pi PicoとGrove rotary angleセンサーを接続して、回転角度データを取得する

Raspberry Pi PicoとGrove rotary angleセンサーを接続して、回転角度データを取得するには、以下の手順を実行します。

〇Raspberry Pi PicoとGrove rotary angleセンサー・Groveスクリューターミナルを接続した写真

開発手順

1. 部品の用意と配線
Raspberry Pi Picoの他、以下の部品とジャンパー線を用意します。

・GROVE - rotary angleセンサ
※以下の様なスターターキットに含まれています
Groveスターターキット(Raspberry Pi Pico用)
https://www.switch-science.com/catalog/7103/

・Grove - スクリューターミナル
https://www.switch-science.com/catalog/7102/

スクリューターミナルを上面手前に配置したとき、以下の様にスクリューターミナルとRaspberry Pi Picoを接続します。
・GND(左から1番目の端子)をRaspberry Pi PicoのAGNDと印字されているピン(33番ピン)に接続
・VCC(左から2番目の端子)をRaspberry Pi Picoの3V3と印字されているピン(36番ピン)に接続
・D1(右から1番目の端子)をRaspberry Pi Picoの26番ピン(GP26_A0)に接続

Grove - スクリューターミナルとGROVE rotary angleセンサはGroveケーブルで接続します。

2. プログラミングと実行 ThonnyでRaspberry Pi Picoにmain.pyとして以下のプログラムを保存して、実行します。ターミナルに回転角度データ(0-65535)が表示されるのを確認します。
import machine
import time

# Raspberry Pi Picoの26ピン=ADC0
pin26 = machine.ADC(0)

while True:
    value = pin26.read_u16()
    print("rotary angle sensor:{}".format(value))
    time.sleep(1)

関連情報

Groveデバイスまとめ

2021年7月15日木曜日

Raspberry Pi PicoとGroveブザーを接続して、音を鳴らす

Raspberry Pi PicoとGroveブザーを接続して、音を鳴らすには、以下の手順を実行します。

〇Raspberry Pi PicoとGroveブザー・Groveスクリューターミナルを接続した写真

開発手順

1. 部品の用意と配線
Raspberry Pi Picoの他、以下の部品とジャンパー線を用意します。

・GROVE - ブザー
https://www.switch-science.com/catalog/804/

・Grove - スクリューターミナル
https://www.switch-science.com/catalog/7102/

スクリューターミナルを上面手前に配置したとき、以下の様にスクリューターミナルとRaspberry Pi Picoを接続します。
・GND(左から1番目の端子)をRaspberry Pi PicoのAGNDと印字されているピン(33番ピン)に接続
・VCC(左から2番目の端子)をRaspberry Pi Picoの3V3と印字されているピン(36番ピン)に接続
・D1(右から1番目の端子)をRaspberry Pi PicoのGP5番ピンに接続

Grove - スクリューターミナルとGROVEブザーはGroveケーブルで接続します。

2. プログラミングと実行
ThonnyでRaspberry Pi Picoにmain.pyとして以下のプログラムを保存して、実行します。2秒おきに短いブザー音がなることを確認します。
import machine
import time

PIN5 = machine.Pin(5, machine.Pin.OUT)

while True:
    # 2秒おきに短いブザー音を出力
    PIN5.value(1)
    time.sleep(0.1)
    PIN5.value(0)
    time.sleep(1.9)

関連情報

Groveデバイスまとめ

2021年7月14日水曜日

M5StickCにGroveブザーを接続して、MicroPythonでブザーを制御するREST APIサーバーを作成する

MicroPythonでブザーを制御するREST APIサーバーを作成するには、以下のコードの様にMicroWebSrv2モジュールを使用して、特定URLアクセス時にブザーが鳴るようにします。

〇M5StickCとGroveブザーを接続した写真

開発手順

1. M5StickC上にlibフォルダを作成しMicroWebSrv2モジュールをアップロード
以下のページのCodeメニューのDownload ZIPをクリックして、ソースをダウンロードします。ダウンロード後、ZIPファイルを解凍します。
MicroWebSrv2 ※ESP32上でも動作するMicro Web Serverのgithubリポジトリ
https://github.com/jczic/MicroWebSrv2

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側でZIPを解凍した中にあるMicroWebSrv2フォルダ上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行

以下のコードのSSIDやWiFiのパスワード、固定IPアドレスを変更してmain.pyとして保存して、実行します。
/buzzerにstate=1というパラメータをGETで渡したときに、0.2秒だけブザーを鳴らします。
import machine
import time
from MicroWebSrv2 import *
import network

ssid = "WiFiのssid"
password = "WiFiのパスワード"

# Wifiの初期化
def connect_wifi():
    sta_if = network.WLAN(network.STA_IF)
    # 固定IPに設定する場合は以下の1行を有効化
    sta_if.ifconfig(('xxx.xxx.xxx.xxx','255.255.255.0','192.168.1.1','8.8.8.8'))
    if not sta_if.isconnected():
        print('connecting to network...')
        sta_if.active(True)
        sta_if.connect(ssid, password)
        while not sta_if.isconnected():
            pass
    print('network config:', sta_if.ifconfig())

connect_wifi()

# Groveブザーの初期化
pin33 = machine.Pin(33, machine.Pin.OUT)
pin33.value(0)

# 空のロギング関数
def no_logging(self, msg, msgType):
    return 0

# Webサーバーの初期化
mws2 = MicroWebSrv2()
mws2.SetEmbeddedConfig()
mws2.BufferSlotsCount = 2
mws2.OnLogging = no_logging
mws2.StartManaged()

# Routeの設定
@WebRoute(GET, '/buzzer')
def rest_buzzer(microWebSrv2, request) :
    if 'state' in request.QueryParams:
        if request.QueryParams.get('state') == '1':
            # ブザーON
            pin33.value(1)
            time.sleep(0.2)

            # ブザーOFF
            pin33.value(0)        
    request.Response.ReturnOkJSON({
        'status' : 'ok'
    })

# キー停止があるまで、無限ループ
try:
    while True :
        time.sleep(1)
except KeyboardInterrupt :
    mws2.Stop()

3. ブラウザからのアクセス
ブラウザから以下のURLにアクセスして、ブザーが鳴ることを確認します。
http://<設定したIPアドレス/buzzer?state=1

関連項目

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

・MicroWebSrv2のリポジトリ
https://github.com/jczic/MicroWebSrv2

2021年7月12日月曜日

M5StickCのLCDにm5stickc_lcdモジュールを使用して画面をスクロールする

M5StickCのLCDにm5stickc_lcdモジュールを使用して画面をスクロールするには、以下の手順を実行します。

〇画面をスクロールしたM5StickCの写真

開発手順

1. M5StickC上にlibフォルダを作成しm5stickc_lcdモジュールをアップロード
以下のページのRAWボタンを右クリックして「名前を付けて保存」を選択してm5stickc_lcd.pyをダウンロードします。
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側フォルダのm5stickc_lcd.py上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
画面スクロールはscrollメソッドで行います。以下をmain.pyとして、M5StickCに保存して実行します。
import m5stickc_lcd
import random
import time

def color( red, green, blue ) :
  return int.from_bytes(int( (((red & 0xF8) << 8) | ((green & 0xFC) << 3) | (blue >> 3)) ).to_bytes(2, "big") ,"little")

# m5stick_lcdを使用しての画面スクロール
lcd = m5stickc_lcd.ST7735()
py = 80
while True:
    lcd.pixel(79, py, color(0x00, 0x00, 0x00))
    dy = int(random.uniform(-2, 2))
    py += dy
    lcd.pixel(79, py, color(0xFF, 0xFF, 0xFF))
    lcd.scroll(-1, 0)
    lcd.show()
    time.sleep(0.1)

備考

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

・m5stickc_lcdのページ
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

2021年7月11日日曜日

M5StickCとGrove温度センサーで、温度データをREST API経由で送信する

M5StickCとGrove温度センサーで、温度データをREST API経由で送信するには、以下の手順を実行します。
構成としてはM5StickCに接続したGrove温度センサーで温度を取得します。それからM5StickCからWiFi経由でPC側のFlaskのRESTサービスにアクセスしデータを送信します。

〇M5StickCとGrove温度センサーを接続した写真

開発手順

1. PC側:pipenvのインストール
sudo apt-get -y install python3-pip python3-distutils python3-dev python3-testresources

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

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

source ~/.bashrc

2. PC側:flaskのインストール
以下のコマンドで、flaskをインストールした仮想環境を作成します。
mkdir -p ./m5stickc_temp

cd ./m5stickc_temp

pipenv --python 3

pipenv install flask

pipenv shell

3. PC側:REST APIでデータを受け取り、データを表示するFlaskアプリケーションの構築
以下のコードをapp.pyとして保存します。

app.py
from flask import Flask, jsonify, request
import time

app = Flask(__name__)

@app.route('/temp', methods=["POST"])
def m5stick_temp():
    temp = float(request.json['temp'])
    print("temp:{}".format((temp)))
    return {"status":"ok"}

app.run(debug=True, host='0.0.0.0', port=5010, threaded=True)

4. PC側:実行
Flaskを実行するには、以下のコマンドを実行します。
python app.py
※Ctrl+Cで停止します

4. M5StickC側:M5StickC上にlibフォルダを作成しurequestsモジュールをアップロード
以下のページのRAWボタン上で右クリックメニューから「名前を付けてリンク先を保存」を選択して、ダウンロードします。
https://github.com/micropython/micropython-lib/blob/master/python-ecosys/urequests/urequests.py

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側のrequests.py上で右クリックメニューからUpload to /libを選択します。

5. M5StickC側:以下のコードのWiFiのSSID/パスワード/REST APIの接続先を設定して、main.pyとして保存します。実行後、2秒おきにPC側に温度センサーの値が表示されることを確認します。
import machine
import time
import math
import urequests
import ujson
import network

ssid = "WiFiのssid"
password = "WiFiのパスワード"

# REST APIの接続先
url = "http://192.168.1.xxx:5010/temp"
header = {'Content-Type':'application/json'}


# Wifiの初期化
def connect_wifi():
    sta_if = network.WLAN(network.STA_IF)
    if not sta_if.isconnected():
        print('connecting to network...')
        sta_if.active(True)
        sta_if.connect(ssid, password)
        while not sta_if.isconnected():
            pass
    print('network config:', sta_if.ifconfig())

connect_wifi()

# ADC初期化
pin33 = machine.ADC(machine.Pin(33))
pin33.atten(machine.ADC.ATTN_11DB)
pin33.width(machine.ADC.WIDTH_10BIT)

time.sleep(1)
while True:
    # WiFi接続
    connect_wifi()

    # 温度センサー測定
    # 5V=1023 -> 3.6V=1023
    value = pin33.read()*(3.6/5.0)
    # refer to https://wiki.seeedstudio.com/Grove-Temperature_Sensor_V1.2/
    r = 100000.0 * (1023.0 / value - 1.0)
    temperature = 1.0 / (math.log10(r / 100000.0) / 4275.0 + 1 / 298.15) - 273.15
    # REST APIに通知
    data = ujson.dumps({"temp":str(temperature)})
    try:
        resp = urequests.post(url, data=data.encode("utf-8"), headers = header)
        print(resp.json())
        resp.close()
    except OSError as err:
        print(err)
        print("----")
    
    time.sleep(2)
    # deepsleep
    #machine.deepsleep(60*60*1000) # 3600sec=1時間

関連情報

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

ADC (アナログ/デジタル変換)
※MicroPythonのDocumentation

Groveデバイスまとめ

M5StickCのLCDにm5stickc_lcdモジュールを使用してピクセルを描画する

M5StickCのLCDにm5stickc_lcdモジュールを使用してピクセルを描画するには、以下の手順を実行します。

〇ピクセルを描画したM5StickCの写真

開発手順

1. M5StickC上にlibフォルダを作成しm5stickc_lcdモジュールをアップロード
以下のページのRAWボタンを右クリックして「名前を付けて保存」を選択してm5stickc_lcd.pyをダウンロードします。
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側フォルダのm5stickc_lcd.py上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
ピクセルの描画はpixelメソッドで行います。以下をmain.pyとして、M5StickCに保存して実行します。
import m5stickc_lcd
import random
import time

def color( red, green, blue ) :
  return int.from_bytes(int( (((red & 0xF8) << 8) | ((green & 0xFC) << 3) | (blue >> 3)) ).to_bytes(2, "big") ,"little")

# m5stick_lcdを使用してのピクセル描画
lcd = m5stickc_lcd.ST7735()
while True:
    px = int(random.uniform(0, 80))
    py = int(random.uniform(0, 160))
    red = int(random.uniform(0, 255))
    green = int(random.uniform(0, 255))
    blue = int(random.uniform(0, 255))
    lcd.pixel(px, py, color(red, green, blue))
    lcd.show()
    time.sleep(0.1)

備考

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

・m5stickc_lcdのページ
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

2021年7月10日土曜日

M5StickCのLCDにm5stickc_lcdモジュールを使用して四角形を描画する

M5StickCのLCDにm5stickc_lcdモジュールを使用して四角形を描画するには、以下の手順を実行します。

〇四角形を描画したM5StickCの写真

開発手順

1. M5StickC上にlibフォルダを作成しm5stickc_lcdモジュールをアップロード
以下のページのRAWボタンを右クリックして「名前を付けて保存」を選択してm5stickc_lcd.pyをダウンロードします。
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側フォルダのm5stickc_lcd.py上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
直線の描画はrect(塗りつぶし無し)/fill_rect(塗りつぶしあり)メソッドで行います。以下をmain.pyとして、M5StickCに保存して実行します。
import m5stickc_lcd

def color( red, green, blue ) :
  return int.from_bytes(int( (((red & 0xF8) << 8) | ((green & 0xFC) << 3) | (blue >> 3)) ).to_bytes(2, "big") ,"little")

# m5stick_lcdを使用しての四角形描画
lcd = m5stickc_lcd.ST7735()
# 枠線のみ
lcd.rect(0, 0, 79, 89, color(0x00, 0x00, 0xFF))
# 四角形塗りつぶし
lcd.fill_rect(0, 90, 79, 179, color(0xFF, 0x00, 0x00))

lcd.show()

備考

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

・m5stickc_lcdのページ
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

2021年7月9日金曜日

M5StickCのLCDにm5stickc_lcdモジュールを使用して直線を描画する

M5StickCのLCDにm5stickc_lcdモジュールを使用して直線を描画するには、以下の手順を実行します。

〇直線を描画したM5StickCの写真

開発手順

1. M5StickC上にlibフォルダを作成しm5stickc_lcdモジュールをアップロード
以下のページのRAWボタンを右クリックして「名前を付けて保存」を選択してm5stickc_lcd.pyをダウンロードします。
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側フォルダのm5stickc_lcd.py上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
直線の描画はlineメソッドで行います。以下をmain.pyとして、M5StickCに保存して実行します。
import m5stickc_lcd

def color( red, green, blue ) :
  return int.from_bytes(int( (((red & 0xF8) << 8) | ((green & 0xFC) << 3) | (blue >> 3)) ).to_bytes(2, "big") ,"little")

# m5stick_lcdを使用しての直線描画
lcd = m5stickc_lcd.ST7735()
lcd.line(0, 0, 89, 179, color(0xFF, 0x00, 0xFF))

lcd.show()

備考

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

・m5stickc_lcdのページ
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

2021年7月8日木曜日

M5StickCのLCDにm5stickc_lcdモジュールを使用して垂直線を描画する

M5StickCのLCDにm5stickc_lcdモジュールを使用して垂直線を描画するには、以下の手順を実行します。

〇垂直線を描画したM5StickCの写真

開発手順

1. M5StickC上にlibフォルダを作成しm5stickc_lcdモジュールをアップロード
以下のページのRAWボタンを右クリックして「名前を付けて保存」を選択してm5stickc_lcd.pyをダウンロードします。
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側フォルダのm5stickc_lcd.py上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
垂直線の描画はvlineメソッドで行います。以下をmain.pyとして、M5StickCに保存して実行します。
import m5stickc_lcd

def color( red, green, blue ) :
  return int.from_bytes(int( (((red & 0xF8) << 8) | ((green & 0xFC) << 3) | (blue >> 3)) ).to_bytes(2, "big") ,"little")

# m5stick_lcdを使用しての垂直線の描画
lcd = m5stickc_lcd.ST7735()
for lc in range(16):
    lcd.vline(lc * 5, 0, lc*10, color(0xFF, 0xFF, 0xFF))

lcd.show()

備考

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

・m5stickc_lcdのページ
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

2021年7月7日水曜日

M5StickCのLCDにm5stickc_lcdモジュールを使用して水平線を描画する

M5StickCのLCDにm5stickc_lcdモジュールを使用して水平線を描画するには、以下の手順を実行します。

〇水平線を描画したM5StickCの写真

開発手順

1. M5StickC上にlibフォルダを作成しm5stickc_lcdモジュールをアップロード
以下のページのRAWボタンを右クリックして「名前を付けて保存」を選択してm5stickc_lcd.pyをダウンロードします。
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側フォルダのm5stickc_lcd.py上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
水平線の描画はhlineメソッドで行います。以下をmain.pyとして、M5StickCに保存して実行します。
import m5stickc_lcd

def color( red, green, blue ) :
  return int.from_bytes(int( (((red & 0xF8) << 8) | ((green & 0xFC) << 3) | (blue >> 3)) ).to_bytes(2, "big") ,"little")

# m5stick_lcdを使用して水平線を描画する
lcd = m5stickc_lcd.ST7735()
for lc in range(16):
    lcd.hline(0, lc*10, lc*5, color(0xFF, 0xFF, 0xFF))

lcd.show()

備考

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

・m5stickc_lcdのページ
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

2021年7月6日火曜日

M5StickCのLCDにm5stickc_lcdモジュールを使用して画面を塗りつぶす

M5StickCのLCDにm5stickc_lcdモジュールを使用して画面を塗りつぶすには、以下の手順を実行します。

〇画面を青で塗りつぶしたM5StickCの写真

開発手順

1. M5StickC上にlibフォルダを作成しm5stickc_lcdモジュールをアップロード
以下のページのRAWボタンを右クリックして「名前を付けて保存」を選択してm5stickc_lcd.pyをダウンロードします。
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側フォルダのm5stickc_lcd.py上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
画面の塗りつぶしはfillメソッドで行います。以下をmain.pyとして、M5StickCに保存して実行します。
import m5stickc_lcd

def color( red, green, blue ) :
  return int.from_bytes(int( (((red & 0xF8) << 8) | ((green & 0xFC) << 3) | (blue >> 3)) ).to_bytes(2, "big") ,"little")

# m5stick_lcdを使用しての塗りつぶし
lcd = m5stickc_lcd.ST7735()
lcd.fill(color(0x00, 0x00, 0x80))

lcd.show()

備考

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

・m5stickc_lcdのページ
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

2021年7月5日月曜日

M5StickCのLCDにm5stickc_lcdモジュールを使用して英文字を描画する

M5StickCのLCDにm5stickc_lcdモジュールを使用して英文字を描画するには、以下の手順を実行します。

開発手順

1. M5StickC上にlibフォルダを作成しm5stickc_lcdモジュールをアップロード
以下のページのRAWボタンを右クリックして「名前を付けて保存」を選択してm5stickc_lcd.pyをダウンロードします。
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側フォルダのm5stickc_lcd.py上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
文字列の描画はtextメソッドで行います。以下をmain.pyとして、M5StickCに保存して実行します。
import m5stickc_lcd

def color( red, green, blue ) :
  return int.from_bytes(int( (((red & 0xF8) << 8) | ((green & 0xFC) << 3) | (blue >> 3)) ).to_bytes(2, "big") ,"little")

# m5stick_lcdを使用しての英文字描画
lcd = m5stickc_lcd.ST7735()
lcd.text('Hello,', 0, 2, color(0xDD, 0xDD, 0x00))
lcd.text('World!', 0, 12, color(0xDD, 0xDD, 0x00))

lcd.show()

備考

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

・m5stickc_lcdのページ
https://gist.github.com/pklazy/9fa33b07b337cb61e415377e0bbb6616

2021年7月4日日曜日

M5StickCにGroveの温度センサーを接続して、MicroPythonで取得した温度を返すREST APIサーバーを作成する

M5StickCにGroveの温度センサーを接続して、MicroPythonで取得した温度を返すREST APIサーバーを作成するには、以下のコードの様にMicroWebSrv2モジュールを使用して、温度センサーの値をJSONで返すようにします。

〇M5StickCとGrove温度センサーを接続した写真

開発手順

1. M5StickC上にlibフォルダを作成しMicroWebSrv2モジュールをアップロード
以下のページのCodeメニューのDownload ZIPをクリックして、ソースをダウンロードします。ダウンロード後、ZIPファイルを解凍します。
MicroWebSrv2 ※ESP32上でも動作するMicro Web Serverのgithubリポジトリ
https://github.com/jczic/MicroWebSrv2

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側でZIPを解凍した中にあるMicroWebSrv2フォルダ上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
以下のコードのSSIDやWiFiのパスワード、固定IPアドレスを変更してmain.pyとして保存して、実行します。
import machine 
import time
import math
from MicroWebSrv2 import *
import network

ssid = "WiFiのssid"
password = "WiFiのパスワード"

# Wifiの初期化
def connect_wifi():
    sta_if = network.WLAN(network.STA_IF)
    # 固定IPに設定する場合は以下の1行を有効化
    sta_if.ifconfig(('xxx.xxx.xxx.xxx','255.255.255.0','192.168.1.1','8.8.8.8'))
    if not sta_if.isconnected():
        print('connecting to network...')
        sta_if.active(True)
        sta_if.connect(ssid, password)
        while not sta_if.isconnected():
            pass
    print('network config:', sta_if.ifconfig())

connect_wifi()

# ADC初期化
pin33 = machine.ADC(machine.Pin(33))
pin33.atten(machine.ADC.ATTN_11DB)
pin33.width(machine.ADC.WIDTH_10BIT)

# 空のロギング関数
def no_logging(self, msg, msgType):
    return 0

# Webサーバーの初期化
mws2 = MicroWebSrv2()
mws2.SetEmbeddedConfig()
mws2.BufferSlotsCount = 2
mws2.OnLogging = no_logging
mws2.StartManaged()

# Routeの設定
@WebRoute(GET, '/temp')
def rest_temp(microWebSrv2, request) :
    # 5V=1023 -> 3.6V=1023
    value = pin33.read()*(3.6/5.0)
    # refer to https://wiki.seeedstudio.com/Grove-Temperature_Sensor_V1.2/
    r = 100000.0 * (1023.0 / value - 1.0)
    temperature = 1.0 / (math.log10(r / 100000.0) / 4275.0 + 1 / 298.15) - 273.15
    request.Response.ReturnOkJSON({
        'temp' : temperature
    })

# キー停止があるまで、無限ループ
try:
    while True :
        time.sleep(1)
except KeyboardInterrupt :
    mws2.Stop()

3. ブラウザからのアクセス
ブラウザから以下のURLにアクセスして、温度センサーの値がJSON形式で取得できることを確認します。
http://<設定したIPアドレス/temp

関連情報

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

ADC (アナログ/デジタル変換)
※MicroPythonのDocumentation

Groveデバイスまとめ

M5StickCの電源管理IC(AXP192)の温度をMicroPythonで取得する

M5StickCには電源管理IC(AXP192)が搭載されています。MicroPythonでAXP192電源管理ICの温度を取得するには以下の手順を実行します。

開発手順

1. M5StickC上にlibフォルダを作成しAXP192ドライバーをアップロード
以下のページのRAWボタンを右クリックして「名前を付けて保存」を選択してaxp192.pyをダウンロードします。
https://github.com/karfas/M5StickC-uPy/blob/master/axp192.py

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側フォルダのaxp192.py上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
温度はAXP192クラスのtemperatureメソッドで取得する事が出来ます。以下をmain.pyとして、M5StickCに保存して実行します。電源管理IOの温度が2秒おきにThonnyのコンソールに出力されることを確認します。
import machine
import time
import axp192

axp = axp192.AXP192(machine.I2C(0, sda=machine.Pin(21), scl=machine.Pin(22)))
axp.setup()
while True:
    print("Temp: {}C".format(axp.temperature()))
    time.sleep(2)

備考

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

・AXP192のドライバー
https://github.com/karfas/M5StickC-uPy

2021年7月2日金曜日

M5StickCの電源管理IC(AXP192)からMicroPythonでUSB供給電圧・電流を取得する

M5StickCには電源管理IC(AXP192)が搭載されています。AXP192からMicroPythonでUSB供給電圧・電流を取得するには以下の手順を実行します。

開発手順

1. M5StickC上にlibフォルダを作成しAXP192ドライバーをアップロード
以下のページのRAWボタンを右クリックして「名前を付けて保存」を選択してaxp192.pyをダウンロードします。
https://github.com/karfas/M5StickC-uPy/blob/master/axp192.py

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側フォルダのaxp192.py上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
USB供給電圧・電流はAXP192クラスのbus_voltage/bus_currentメソッドで取得する事が出来ます。以下をmain.pyとして、M5StickCに保存して実行します。USB供給電圧・電流が2秒おきにThonnyのコンソールに出力されることを確認します。
import machine
import time
import axp192

axp = axp192.AXP192(machine.I2C(0, sda=machine.Pin(21), scl=machine.Pin(22)))
axp.setup()
while True:
    print("Bus voltage: {}V".format(axp.bus_voltage()))
    print("Bus current: {}mA".format(axp.bus_current()))
    time.sleep(2)

備考

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/

・AXP192のドライバー
https://github.com/karfas/M5StickC-uPy

2021年7月1日木曜日

M5StickCの電源管理IC(AXP192)からMicroPythonでバッテリー電圧を取得する

M5StickCには電源管理IC(AXP192)が搭載されています。AXP192からMicroPythonでバッテリー電圧を取得するには以下の手順を実行します。

開発手順

1. M5StickC上にlibフォルダを作成しAXP192ドライバーをアップロード
以下のページのRAWボタンを右クリックして「名前を付けて保存」を選択してaxp192.pyをダウンロードします。
https://github.com/karfas/M5StickC-uPy/blob/master/axp192.py

/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側フォルダのaxp192.py上で右クリックメニューからUpload to /libを選択します。

2. プログラミングと実行
バッテリーの電圧はAXP192クラスのbattery_voltageメソッドで取得する事が出来ます。以下をmain.pyとして、M5StickCに保存して実行します。バッテリー電圧が2秒おきにThonnyのコンソールに出力されることを確認します。
import machine
import time
import axp192

axp = axp192.AXP192(machine.I2C(0, sda=machine.Pin(21), scl=machine.Pin(22)))
axp.setup()
while True:
    print("Battery: {}V".format(axp.battery_voltage()))
    time.sleep(2)

備考

・使用したMicroPython firmware: esp32-20210418-v1.15.bin
>https://micropython.org/download/esp32/

・AXP192のドライバー
https://github.com/karfas/M5StickC-uPy

2021年6月29日火曜日

M5StickCのRTCから年月日時分秒をMicroPythonで取得する

M5StickCのRTCから年月日時分秒をMicroPythonで取得するには、以下のコードの様にRTCクラスのdatetimeメソッドを使用します。

main.py
import machine
import time

rtc = machine.RTC()
#help(rtc)

while True:
    # yyyy-mm-dd hh:mi:ss
    print("{}-{:0>2}-{:0>2} {:0>2}:{:0>2}:{:0>2}".format(rtc.datetime()[0], rtc.datetime()[1], rtc.datetime()[2], rtc.datetime()[4], rtc.datetime()[5], rtc.datetime()[6]))
    time.sleep(2)

・備考
使用したMicroPython firmware: esp32-20210418-v1.15.bin
https://micropython.org/download/esp32/