センサーを読んでクラウドに送ると言った基本的な部分は抑えられたかと思います。
from machine import I2C, Pin
import machine, utime, time
from m5stack import lcd
import urequests
from mpu9250 import MPU9250
import ambient
def format(n, length):
n = int(n)
n = str(n)
l = len(n)
if l < length:
n = " " * (length - l) + n
return n
def isPushAnyKey():
if buttonA.isPressed():
return True
if buttonB.isPressed():
return True
if buttonC.isPressed():
return True
return False
def push_any_key():
lcd.print("Push Any Key.¥n")
while not isPushAnyKey():
utime.sleep(0.01)
def lcdPrintln(str):
print(str)
lcd.print(str + "\n")
# Fit watch
rtc = machine.RTC()
lcdPrintln("Synchronize time from NTP server ...")
rtc.ntp_sync(server="ntp.nict.jp", tz='JST-9')
# init LCD
lcd.clear()
lcd.setBrightness(200)
lcd.font(lcd.FONT_Default)
lcd.setCursor(0, 0)
lcd.setColor(lcd.WHITE)
# get google
lcdPrintln("get http://www.google.com")
response = urequests.get("http://www.google.com")
lcdPrintln("status: " + str(response.status_code))
#print(response.text)
push_any_key()
# read gyro
lcd.clear()
lcd.setCursor(0, 0)
am = ambient.Ambient(チャンネルID, "ライトコード")
i2c = I2C(scl=Pin(22), sda=Pin(21))
imu = MPU9250(i2c)
while True:
data = []
lcd.clear()
while len(data) < 10:
g = imu.magnetic
x = format(g[0], 6)
y = format(g[1], 6)
z = format(g[2], 6)
lcdPrintln(x + " " + y + " " + z)
dt = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
data.append({"created": dt, "d1": g[0], "d2": g[1], "d3": g[2]})
utime.sleep(5)
r = am.send(data)
lcdPrintln("http-status: " + str(r.status_code))
このコード特に問題ないように見えますが、延々と走らせておくと Ambient オブジェクト内でエラーを起こしてプログラムが停止してしまいます。このままでは実用にならないので、自前サーバーを立てることにします。
ちょっと話がそれますが、m5cloud を使わずにオフラインでの開発方法について備忘録。
1. アップロードツールのインストール
$ sudo pip install adafruit-ampy
2. ソースコードのアップロード方法
$ ampy -p /dev/ttyUSB0 put ./flash/main.py /flash/main.py
この方法だと、デバッグ情報などを見るシリアル通信と交互に行う、言い換えるとファイルをアップロードするたびにシリアル接続を切断して、アップロード後につなぎ直すというとてもめんどくさいことになります。
しかし、m5cloudのソースエディタは最少機能なので Visual Studio Code などの使いやすいエディタが使いたいです。なので、ソースの編集は Visual Studio Code で行い、ソースをまるごと m5cloud の IDE にコピペして m5cloud から実機にアップロードというやり方が良い気がします。
0 件のコメント:
コメントを投稿