fc2ブログ

Wi-Fiマイコンで遊ぶ(4)

 今回は、以前のブログで紹介した、技適をようやくパスして購入できるようになったRaspberry Pi Pico Wの動作確認についてです。

Raspberry Pi Pico W(¥1,210)
以下の手順で準備・評価を行いました。
 1. Raspberry Pi Pico Wの開発環境のセットアップ
 2. Wi-Fi接続の動作確認(wifi_scanプログラム実行)
 3. Micro Pythonの実行環境構築
 4. WebServer構築と動作確認

1. Raspberry Pi Pico Wの開発環境のセットアップ
 開発を行うPCはRaspberry Pi4にしました。PCとマイコンの違いはありますが、Raspberry Pi同士です。Raspberry Piのサイトにセットアップ手順のPDFファイル(getting-started-with-pico.pdf)がありますので、そのChapter.1を実行しました。必要なSDKやプログラムのサンプルがセットアップされました。

2. Wi-Fi接続の動作確認(wifi_scanプログラム実行)
 次に、同じくRaspberry Piのサイトにあるネット接続に関するマニュアル(connecting-to-the-internet-with-pico-w.pdf)のChapter.2に記載の「wifi_scan」というプログラムを書き込んで動かしました。
 プログラムを動かすと、自宅のWi-Fiルータでも通信していることが確認できました。HomeRouterStatus_230506.pngまた、ターミナルアプリのminicomを立ち上げると、Wi-Fiのスキャン状態を確認できました。Wi-Fiの動作は問題ないようです。Wifi_scan_result_230506.png
3. Micro Pythonの実行環境構築
 Raspberry Pi4から立ち上げたVisual Studio Code上でMicro Pythonを実行できるように環境を構築しました。ネットからMicro PythonのFirmwareをダウンロードしておきます。MicroPython_firmware_230506.png
 Raspberry Pi Pico WをRaspberry PiにUSB接続すると、デスクトップ上に「RPI-RP2アイコン」が現れますので、このダウンロードしたFirmwareを書き込む(ドラッグする)とPico W側でMicro Pythonが利用できる環境が整います。VSCodeには「Pico-W-Go」という拡張機能を入れておきます。MicroPython_Env_230506.png
4. WebServer構築と動作確認
 Pico WをWebServerとして利用し、Pico Wに実装されているのLEDのON/OFFや温度センサの値をブラウザから制御、閲覧できるプログラムを作成し、動作確認しました。プログラムは以下の通りです。
import machine
import network
import socket
from time import sleep
import utime

led = machine.Pin("LED", machine.Pin.OUT)
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)

ssid = 'Buffalo-G-C870'
password = 'my password'

def connect():
#Connect to WLAN
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while wlan.isconnected() == False:
print('Waiting for connection...')
sleep(1)
ip = wlan.ifconfig()[0]
print(f'Connected on {ip}')
return ip

def open_socket(ip):
# Open a socket
address = (ip, 80)
connection = socket.socket()
connection.bind(address)
connection.listen(1)
return connection

def webpage(temperature, state):
#Template HTML
html = f"""
<!DOCTYPE html>
<html>
<form action="./lighton">
<input type="submit" value="Light on" />
</form>
<form action="./lightoff">
<input type="submit" value="Light off" />
</form>
<p>LED is {state}</p>
<p>Temperature is {temperature}</p>
</body>
</html>
"""
return str(html)

def serve(connection):
#Start a webserver
state = 'OFF'
led.off()
while True:
client = connection.accept()[0]
request = client.recv(1024)
request = str(request)

reading = sensor_temp.read_u16() * conversion_factor
temp = 27 - (reading - 0.706)/0.001721
temp = round(temp, 1)
temp = str(temp)

try:
request = request.split()[1]
except IndexError:
pass
if request == '/lighton?':
#led.on()
led.on()
state = 'ON'
elif request =='/lightoff?':
led.off()
#led.off()
state = 'OFF'
temperature = temp # 25.0 # pico_temp_sensor.temp
html = webpage(temperature, state)
client.send(html)
client.close()

try:
ip = connect()
connection = open_socket(ip)
serve(connection)
except KeyboardInterrupt:
machine.reset()
実行結果は以下の通りです。Micro Pythonを実行しているRaspberry Piのブラウザから確認した結果です。RaspiPicoW_Webserver_Run1_230506.pngLEDのON/OFFがブラウザから制御できました。RaspiPicoW_Webserver_Run2_230506.pngまた、Androidのスマホのブラウザからも同様に問題なく動作しました。AndroidCellPhone_230506.png
 今までのRaspberry Pi Picoは無線機能がなかったため、不便に感じていました。Wi-Fiを利用したい場合には別途ESP8266やESP32などのWi-Fiマイコンが必要でした。そうなると、Pico自身の存在感がなくなってしまいます。このPicoWのリリースでESPシリーズと同じ土俵に上がれたような気がします。SDK等、充実しているので、また遊んでみようと思います。
スポンサーサイト



Wi-Fiマイコンで遊ぶ(3)

 前回の続きです。前回の最後に、部屋の温湿度、気圧データをAmbientに上げているシステムを「M5Stamp Pico Mate仕様」に置き換えた件に触れましたので、今回はそのお話をしたいと思います。
 その前に、このAmbientにデータを上げているシステムですが、以前のブログでお話しした通り、昨年末に自宅のWi-Fiルータを交換した後に、元々のシステムが動かなくなり(厳密に言うとESP8266マイコンにプログラムが書き込めない問題があり)、遊休のM5StickCとENV II Hatを用いて温度、湿度、気圧を測定し、AmbientとLine Notifyにデータを上げるシステムに変更していました。この詳細をブログで話すと言いながら、4か月近く放ったらかしですね・・(この間にまたシステムを変えてしまいましたが・・)。

 さて、本題です。Arduino側の設定としては、M5stackのボード情報を取ってくるための基本設定(追加のボードマネージャのURL設定)とarduino_setting_1_230506.pngボード、および通信設定です。ESP8266に比べると、M5Stackはシンプルでいいですね。arduino_setting_2_230506.png 書き込んだプログラムは、Wi-Fiルータの設定以外は2年前のブログでお話しした内容と全く同じものです。動作確認し、温度、気圧、湿度が正しく読み取れていることを確認しました。ambient_logging_Run_230506.png システムは現在、ブレッドボード上でジャンパ線が乱れていますが、こんな感じでセットアップしました。電源は近くにあるRaspberry Piから5V供給して、DC-DCコンバータで3.3Vに落として利用しています。ambient_logging_system_230506.png
 システムを動かしてしばらく様子を見ていると、1日の中で同じ時刻頃でデータが取れなくなり、日が変わった0時過ぎに復活するという奇妙な、再現性のある現象に見舞われました。ambient_logging_NG_230506.pngそういえば、Ambientからデータ管理についてメールが来ていたことを思い出し、ホームページで確認すると、1日3,000件までの制約があり、0時にクリアされるとのことでした。ambient_rule_230506.pngこれが原因と思い、データのログを確認すると、確かに3,000点までは取れており、それ以後は取れていませんでした。システムをM5Stamp Picoに変更した際にサンプリング間隔を狭くしたこと(10sec間隔)を思い出し、1日3,000件を超えないようにプログラムのサンプリング間隔を修正しました。結果、1日の途中でデータが取れなくなる問題は無くなりました。ambient_logging_OK_230506.png
 取り急ぎ、M5StickCとENV II Hatを用いたシステムを、部品単価の安いM5Stamp Picoを用いたシステムに置き換えることができました。ただ、本来のあるべき姿は、そもそもプログラムが書き込めなくなったESP8266が正常に機能すれば良いだけの話なので、この問題が解決できれば、今回の対応も暫定的なものになると思います。まぁ、いろいろ試せて勉強になりますが・・。

Wi-Fiマイコンで遊ぶ(2)

 前回のブログでお話しした「ESP-WROOM-02開発ボード」と「M5Stamp Pico Mate」について今回動作確認を行いました。

ESP-WROOM-02開発ボード(¥1,280)
 同じESP8266EXが搭載されている「ESP-WROOM-02 DIP化キット」でプログラムを書き込む際に失敗する件は今まで何度もブログでお話しました。ブレッドボード上で、所定のピンをGNDに落としたりする作業をジャンパ線を使って行うのは非常に面倒ですが、このボードはその役目をするボタンスイッチが付いています。PGMスイッチとESP8266_PGM-SW_230423.pngRSTスイッチです。ESP8266_RST-SW_230423.png このボードの回路図は以下の通りです。信号ピンにプルアップ、プルダウン抵抗が実装されており、「ESP-WROOM-02 DIP化キット」でプログラムを書き込む際の配線と異なることが分かりました(これが原因??)。ESP8266_circuit_230423.pngPGMスイッチを押すと、ESP-WROOM-02のI00ピンが3.3VからGNDに落ちます。また、RSTスイッチを押すと、ESP-WROOM-02のRSTピンがGNDに落ち、ESP-WROOM-02がリセットされます。 
 プログラム書き込み時の操作手順は以下の通りです。ESP8266_prog_write_230423.png 今回はWi-Fiを使った事例ではありませんが、「Lチカ」プログラムをMacBookAirとArduinoを用いてESP8266に書き込むと、問題なく動作しました。ESP8266_run_230423.png

M5Stamp Pico Mate(¥1,250)
 まず、ピンとGROVEコネクタをはんだ付けする所からスタートです。M5Stamp_1_230423.pngはんだ付け後は六角レンチでフタをネジ止めしました。M5Stamp_2_230423.png裏面から見るとこんな感じです。M5Stamp_3_230423.png表面にピン番号のシールを貼ってできあがりです。M5Stamp_4_230423.png プログラムの書き込みは、以前のブログでお話しした際に用いた「CP2104/CH9102搭載 ESP32 ダウンローダキット」がそのまま使えるとのことで、流用しました。今回も基本的な動作確認のため基板上に実装されているLEDのON/OFFをさせました。問題なく動作しました。M5Stamp_5_writer_230423.png M5Stamp Pico MateはPGMボタンやRSTボタンを操作することもなく、簡単にプログラム実装ができるので、その後、部屋の温湿度、気圧データをAmbientに上げているシステムを「M5Stamp Pico Mate仕様」に置き換えました。この話は改めてお話しします。

Wi-Fiマイコンで遊ぶ(1)

 以前のブログ(2023/01/15)で、ESP8266にArduinoでプログラムが書き込めない不具合があることをお話ししました。その後、最近まで超多忙で休日に十分な時間が作れなかったので、結局、現時点でも解決に至っていません・・。このLine Notifyについてのブログも中途半端な状態で止まっていますね・・。忘れないうちにブログに書いておこうと思いながらも時間が取れずに私の中から忘れ去られようとしています・・。

 今回、このプログラムが書き込めない不具合を調査することも含め、ハードウェアの異常なのか、ソフトウェア関係(設定と環境)の問題なのかを切り分ける上で、Wi-Fi機能のあるマイコンをいくつか購入しました。また、評価をしている最中に、Raspberry Pi Pico Wがようやく技適をパスして購入できるようになりましたので、早速評価の仲間に入れました。

 評価対象のWi-Fiマイコンは以下の4種類です。
1. ESP-WROOM-02開発ボード(¥1,280)ESP-WROOM-02_230422.png 問題のプログラムが書き込めないWi-Fiモジュール ESP-WROOM-02 DIP化キット(¥650)と同じESP8266EXを搭載したモジュールでUSBシリアルインターフェース搭載、かつ電源ラインも安定化したものでリセットボタンも基板上に実装されています。

2. ESP32-DevKitC-32E ESP32-WROOM-32E開発ボード(¥1,600)ESP32_DEV_230422.png 昔購入してあまり使っていないESP-WROOM-32 DIP化キット(¥900)に実装されてないUSBシリアルインターフェースが搭載されている基板です。ピンも初めからハンダ付けされています。

3. M5Stamp Pico Mate(¥1,250)M5Stamp_230422.png ESP32のWi-Fiマイコンを実装したM5STACK製品です。

4. Raspberry Pi Pico W(¥1,210)RaspiPicoW_230422.png Raspberry Pi PicoにInfineon CYW43439無線チップを追加搭載し、無線LAN機能が利用可能となったモデルです。

次回以降はそれぞれのWi-Fiマイコンの動作確認についてお話しします。

Line Notifyを使う(3)

 前回の続きです。大晦日にWi-Fiルータを交換して、Ambientにデータを上げているシステムでデータが更新されていないことに気付きました。過去のブログにある通り、Wi-Fiルータのssidとpasswordをコード上に記載していたので、それらを修正してすぐに終わる予定でしたが、以下のエラーが発生してハマってしまいました。Error1_230115.pngesptool.FatalError: Timed out waiting for packet header

ESP8266は以前からよく利用していた無線マイコンですが、プログラムをマイコンに書き込む際、結構面倒臭いんですよね。ただし、今回は何度やっても同じエラーが出て先に進めません。

実行環境は以下の通りです。
PC
  MacBookAir (11-inch、Early 2014)
  MacOS Big Sur 11.7.1
  CPU Intel Core i5
  Memory 4GB
Arduino 1.x.x (後々2.0.3にUpdate。旧Versionの記録なし)

プログラムは今までESP8266の書き込みに何度も使っているMAX3232ECPEを利用した自作ライターで書き込みました。

うまく行かない試行錯誤の中、簡単なコードである「Lチカ(Blink)」で動作確認しても同じエラーが発生します。また、Arduinoを最新版(1/15現在:Version 2.0.3)入れ替えても同じ現象です・・。Error2_230115.png
対策サイトを確認すると、アップロードスピードが合っていないので、Upload Speedの値を"9600"まで落とすと良いと書いてありましたが、ArduinoのUpload Speedは"57600"が最小で、"9600"は設定できませんでした。Setting_230115.png
原因が分からずに、現時点で解決策を見出せていません・・。万事休す。
MacBookAirでなく、Windows11PCにArduinoをインストールして確認しても同じ不具合が発生しました・・。

直近では2022/11/13のブログにESP32ですが、今回と同じライターで書き込んで問題ありませんでした。ESP8266(ESP-WROOM-02)は1年以上前の2021/08/29のブログでお話ししたのを最後に使っていません。

ライターは最近まで使っていたので、その後、断線等で故障しない限り、こういうことは起こり得ないかな?と思います・・・(要:ESP32で再確認)。ESP8266の故障も考えましたが、新品と交換しても同じエラーが出ていたので、原因は別の所にあるのではないかと思います。

結局、分からずじまいで、遊休のM5StickCとENV II Hatを用いて温度、湿度、気圧を測定し、AmbientとLine Notifyにデータを上げるシステムを製作することにしたのは前回お話ししました。次回はこれらについて詳しくお話します。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: