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

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/

2021年6月27日日曜日

M5StickCにGrove温度センサーを接続して、MicroPythonで温度を取得する

M5StickCにGrove温度センサーを接続して、MicroPythonで温度を取得するには、以下のコードの様に33番ピンの電圧をADCで読み取って計算します。

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

サンプルコード

以下のコードをmain.pyとして保存して、実行します。コンソールに読み取った温度が表示されます
import machine 
import time
import math

pin33 = machine.ADC(machine.Pin(33))
pin33.atten(machine.ADC.ATTN_11DB)
pin33.width(machine.ADC.WIDTH_10BIT)
while True:
    # 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

    print("temp:{:.2f}".format(temperature))
    time.sleep(1)

関連情報

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

Groveデバイスまとめ

2021年6月24日木曜日

M5StickCのジャイロ加速度センサー(MPU6886)とGroveブザーで、すばやく振り回したときブザー音が鳴るようにする(MicroPython)

M5StickCにはジャイロ加速度センサー(MPU6886)が搭載されています。MicroPythonでM5StickCのジャイロ加速度センサー(MPU6886)とGroveブザーで、すばやく振り回したときブザー音が鳴るようにするには以下の手順を実行します。

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

開発手順

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

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

2. プログラミングと実行
MPU6886の加速度センサーの値はx, y, zのタプルで取得する事が出来ます。以下をmain.pyとして、M5StickCに保存して実行します。M5StickCをすばやく振り回すと、ブザー音が短く鳴ります。
import machine
import mpu6886
import time

# ジャイロ加速度計の初期化
i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21))
sensor = mpu6886.MPU6886(i2c)

#sensor.calibrate()

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

while True:
    sv = sensor.gyro
    maxval = max(abs(sv[0]), abs(sv[1]), abs(sv[2]))
    if maxval >= 4.2: # 閾値は適当に調整してください
        # ブザーON
        pin33.value(1)
        time.sleep(0.2)

        # ブザーOFF
        pin33.value(0)        

    print(maxval)
    time.sleep(0.1)

関連情報

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

・MPU6886のドライバー
https://github.com/tuupola/micropython-mpu6886

Groveデバイスまとめ

2021年6月23日水曜日

M5StickCにGroveボタンを接続して、MicroPythonでM5ボタンを押したときにブザーを鳴らす

M5StickCにGroveボタンを接続して、MicroPythonでM5ボタンを押したときにブザーを鳴らすには、M5ボタンにつながっている37番ピンの状態をチェックして、Groveブザーに接続されている33番ピンをON/OFFします。

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

サンプルコード

以下のコードをmain.pyとして保存して、実行します。M5ボタンを押すと0.5秒ブザーが鳴ります。
import machine
import time

# M5StickCのM5ボタン
pin37 = machine.Pin(37, machine.Pin.IN)

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

while True:
    if pin37.value() == 0:
        print("pressed.")

        # ブザーON
        pin33.value(1)
        time.sleep(0.5)

        # ブザーOFF
        pin33.value(0)

    time.sleep(0.1)

関連情報

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

Groveデバイスまとめ

2021年6月22日火曜日

M5StickCにGroveブザーを接続して、MicroPythonでブザーを鳴らす

M5StickCにGroveブザーを接続して、MicroPythonでブザーを鳴らすには、以下のコードの様に33番ピンをON/OFFします。

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

サンプルコード

以下のコードをmain.pyとして保存して、実行します。1秒ブザーが鳴って2秒停止を繰り返します。
import machine
import time
pin33 = machine.Pin(33, machine.Pin.OUT)

while True:
    # ブザーON
    pin33.value(1)
    time.sleep(1)

    # ブザーOFF
    pin33.value(0)
    time.sleep(2)

関連情報

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

Groveデバイスまとめ

2021年6月21日月曜日

M5StickCにGroveボタンを接続して、MicroPythonで取得したボタン状態を表示する

M5StickCにGroveボタンを接続して、MicroPythonで取得したボタン状態を表示するには、以下のコードの様に33番ピンの値を取得します。

〇M5StickCとGroveボタンを接続した写真

サンプルコード

以下のコードをmain.pyとして保存して、実行します。
import machine 
import time
pin33 = machine.Pin(33, machine.Pin.IN)

while True:
    # スイッチ
    state = pin33.value()
    if state == 1 :
        print("pressed.")
    else:
        print("released.")
    time.sleep(2)

関連情報

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

Groveデバイスまとめ