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

2018年11月1日木曜日

ESP32 にて謎のエラー

ちょっと前に ESP32 を使った Blynk アプリを作りました。
久しぶりに動かすことになったのですが一部仕様追加があったので修正してコンパイルしようとしたら謎のエラーが><;

Traceback (most recent call last):
  File "/home/kiya/.arduino15/packages/esp32/tools/esptool/2.3.1/esptool.py", line 34, in
    import serial
ImportError: No module named serial
「WiFi.h」に対して複数のライブラリが見つかりました
使用済:/home/kiya/.arduino15/packages/esp32/hardware/esp32/1.0.0/libraries/WiFi
未使用:/usr/local/arduino-1.8.7/libraries/WiFi
exit status 1
ボードESP32 Dev Moduleに対するコンパイル時にエラーが発生しました。

え〜。WiFi.h が複数あったっていいじゃん!で、調べてみるとこのメッセージは関係ないようです。

ESP32 ( ESP-WROOM-32 , M5Stack )自分的 トラブルシューティング まとめ

警告をすべてオンにして再コンパイルしても何も変わらず…で、エラーメッセージをしげしげ見るとどうやら esptool.py がエラーを出しているよう。

ということで下記を実行して無事コンパイルできました。

$ sudo apt install python-pip
$ pip install pyserial

Ubuntu 17.10 を 18.04 にアップグレードしたのですがどうも調子が悪いのでクリーンインストールしたのでその際必要なモジュールが不足してしまったようです。

2018年6月27日水曜日

M5Stack m5cloud を試してみた。その3

ちょっとしたテストも兼ねて HTTP にて Google のホームページの読み込みを行ったあと、何かボタンを押すまで待ち、5秒毎に内蔵の磁気センサーを読んで10回分をまとめて Ambient に送信するコードを書きました。

センサーを読んでクラウドに送ると言った基本的な部分は抑えられたかと思います。

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 から実機にアップロードというやり方が良い気がします。

2018年6月25日月曜日

M5Stack m5cloud を試してみた。その2

前回の記事では、ハードウェア(ファームウェア)のセットアップをしました。今回はソフトウェア(ウェッブアプリケーション)の設定を行います。

1. m5cloud に登録


http://cloud.m5stack.com/ にアクセスします。

[Register] ボタンを押します。

メアドとパスワードを入力して[Register]ボタンを押します。

Chrome だとレイアウトか崩れてパスワード入力欄の上に[Login]ボタンがかぶってしまっています。私の場合は Chrome に ID とパスワードを記憶させたのでこのまま[Login]ボタンを押しました。

2. デバイスの登録


デバイス・マネージメントが表示されたら [Add] ボタンを押します。

M5Stack の電源を入れ、チェックコードを表示させます。(チェックコードは一定時間ごとに変わります)

チェックコードを入力します。

IDEを開きます。

デバイス選択画面です。まだ1つしか登録されていないのでそのまま [OK] ボタンを押しました。

[File Syncing] と表示されて、サンプルアプリがデバイスにアップロードされます。

サンプルアプリは中身がすべてコメントアウトされているため、デバイスで実行されているにもかかわらず「Run:"main.py"」と表示されるのみです。とりあえずコメントを外して、画面右下の「Upload  & Run」ボタンを押します。

画面に 「Hello World!」と表示されました。

さ〜てと、Python か〜。インデントが段落を表すとかあんまり好きになれそうもないけど頑張ってみるかな…

ということで今回はここまでです。

次回は、加速度センサーの値を読み込んでサーバーに送信させようと思っています。ただ、RFタグを読ませてほしいなんて話が出ているのでもしかするとそちらが先になってしまうかもしれません。(予定は未定w)

2018年6月19日火曜日

M5Stack m5cloud を試してみた。その1

M5Stack という5センチ角ほどのマイコンを試してみました。今回は M5Stack GRAY という加速度、ジャイロ、磁気を計測可能な9軸センサ、MPU9250を搭載したモデルを使用しました。


ILS - M5Stack ESP32 MPU9250 9Axies Motion Sensor Core Development Kit Extensible IoT Development Board

※ Ubuntu 18.04 での記録です。

MCU には技適取得済みの ESP-WROOM-32 が搭載されているので日本でも合法的に使えます。また、フルカラー液晶、3ボタン、microSDカードスロット、スピーカー、バッテリーまで搭載されています。

ESP-WROOM-32 という MCU は 32Bit デュアルコアCPU、 SRAM 520KB、 FLASH 4MB、 Wi-Fi、Bluetooth、タッチセンサー、ホールセンサー、温度センサーを内蔵しています。

普通に Arduino として使えるのですが、今回は microPython が使えるクラウドベース開発環境の m5cloud を試してみました。

1. esptool.py のインストール


ESP32 を Arduino で使っとことがあれば Arduino/IDE/hardware/espressif/esp32/tools/esptool.py などにすでに入っているかもしれません。
また、ESP Easy などを使うためにすでにダウンロードしてあればそれを使ってください。
初めて使うなら下記のコマンドでインストールできると思います。

$ pip install esptool

上記で ~/.local/bin にインストールされると思います。

2. ファームウェアのダウンロード


github に置かれていますのでダウロードしてください。

https://github.com/m5stack/M5Cloud/raw/master/firmwares

私は v0.4.0 というものを入れてみました。

$ wget https://github.com/m5stack/M5Cloud/raw/master/firmwares/m5cloud-20180516-v0.4.0.bin

3. ファームウェアのインストール


$ esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
$ esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash --flash_mode dio -z 0x1000 m5cloud-20180516-v0.4.0.bin

4. 起動


起動すると下記のような画面になりました。



Cボタンを押しながら起動すると WiFi 設定モードになると書かれているようです。

5. スマホにて Wi-Fi 接続


スマホの Wi-Fi 一覧を開くと「M5Stack-xxxx」といった SSID があると思いますのでそれに接続します。

6. 設定画面

ブラウザにて 192.168.4.1 を開くと M5Stack が接続する…はずなのですがしばらく待たされたあと「[504] Gateway Timeout」と表示されてつながりません><;

う〜ん、なんだろうとあれこれいじりまわしてみるた結果、モバイルデータ通信をオフにしてやると設定画面が表示されることがわかりました\(^_^)/

Wi-Fi アクセスポイントの設定画面が表示されますので、M5Stack がインターネットアクセスに利用する SSID とパスワードを入力します。


[Configure] ボタンを押すと設定が保存され M5Stack はその Wi-Fi アクセスポイントに接続するのでスマホが接続されていた [M5Stack-xxxx] というアクセスポイントはなくなっていますので、スマホのブラウザにはエラーが表示されますが M5Stack の画面の「Check Code: xxxxxx」と表示されていれば完了しています。

SSID やパスワードを間違えたときは、M5Stack の C ボタン(右端のボタン)を押しながら起動すれば [M5Stack-xxxx] のアクセスポイントが現れて再度設定できます。

今日はここまで。