M はじめての M5StickC_Plus (11) 〜esp32RMTで赤外線リモコン
by fjk
M5SticCPlusで赤外線リモコンを使うには、Arduino IDEではIRremoteと便利なライブラリがあるが、UIFLOW(MicroPython)ではabc874で紹介したように、IOdata用のIR出力ができなかった。
そこで、MicroPythonの赤外線リモコン使用例を探してみると、「esp32.RMT」が見つかった。(以下、参考ページ例)
1.esp32.RMTの動作テスト
- EDS32用だが同じMicroPythonの日本語マニュアルの例を参考に、赤外線LEDをG26(内蔵はG9)ピンとし、REPLで下記を入力
- import esp32
- from machine import Pin
- r = esp32.RMT(0, pin=Pin(26), clock_div=80, tx_carrier=(38000,50,1)) ・・・>エラー!
- r.write_pulses((1,20,2,40),0)
- ところが、3行目のRMTオブジェクト作成時にエラー!
そこで、さらに調べて見ると、Qiitaさんの「
M5StickC plus のMicropythonで赤外線リモコン」を見つけ、その記述コードを参考に変更すると
- import esp32
- from machine import Pin
- r = esp32.RMT(0, pin=Pin(26), clock_div=80, carrier_freq=38000) # duty=50%
- lst=[560,560, 560,1680, 560,560, 560,1680, 560] # [0101]stop
- r.write_pulses(lst, start=1)
- と、エラー無く進み、オシロで出力波形を見てみると、「0101」と信号が出ていることを確認。
IR(pin26)出力波形
|
左図の一部を拡大(38kHzキャリア確認)
|
※ なお、IR出力はリスト順に0と1を繰り返すが、最初は「carrier出力有」としたいので、start=1とする。
※ M5StickC用のesp32.RMTのパラメータは、上記V1.14の英語版の記述が正しい。
esp32.RMT(channel,・・・,carrier_freq=38000, carrier_duty_percent=50)
RMT.write_pulses(duration, start=1)
※ また、esp32.RMTは送信専用で、受信機能は無い。
2.UIFLOWでpythonスクリプトを使って、NECフォーマットリモコンをテストする
@ 以下の”sendNEC.py”を、abc879の要領でResouceManagerを使ってM5stickCにダウンロード。
ResourceManager画面
|
【microPythonスクラッチ】 sendNEC.py(zip)
# *** sendNEC.py ***
import esp32
import time
T = 560 # uSecond
LEADER_HIGH = 8960 # 16T
LEADER_LOW = 4480 # 8T
def bit2time(frame: list, w_code: word) -> list:
b_mask = 0x0001
for i in range(16):
if (w_code & b_mask):
frame.extend([T, 3 * T]) # bit=1 -> 3T
else:
frame.extend([T, T]) # bit=0 -> T
b_mask <<= 1
return frame
def gen_frame(customer: word, data: word) -> list:
p_width = [LEADER_HIGH, LEADER_LOW]
bit2time(p_width, customer)
bit2time(p_width, data)
p_width.extend([T]) # stop
return p_width
def send_ir(rmt, customer: word, data: word) -> None:
frame = gen_frame(customer, data)
rmt.write_pulses(frame, start = 1)
while not (rmt.wait_done()):
time.sleep_us(T)
def add_invert(code: byte) -> word:
return (code + ((0xff^code)<<8))
def send_NEC(rmt, customer: word, code: byte) -> None:
send_ir(rmt, customer, add_invert(code))
|
- ※M5stickCのROMにダウンロードするファイル名は10文字以内にすること!
A REPLでダウンロードファイル(sendNEC.py)の確認
REPL(テラターム)で確認画面
|
B UI-FLOW画面で、「setup」に続けて[コードを実行]で以下を記述
import sys
sys.path.append('/flash/res')
from sendNEC import *
from machine import Pin
ir_led = esp32.RMT(0, pin=Pin(9), clock_div=80, carrier_freq=38000)
|
- 変数:c_code、dataをblocklyで作成し、以下の値をセット
- c_code = 0xE880 #・・・2バイトのカスタマコード
- data = 0x84 #・・・1バイトのデータ
- 「ボタンA wasPressed」に、[コードを実行]で以下を記述。
send_ir(ir_led, c_code, add_invert(data))
|
- または、以下のコードを記述
send_NEC(ir_led, c_code, data)
|
-
-
★ esp32.RMTが動作中に、UIFLOWで再度「RUN」を実行すると、「エラー」となる。
この場合、M5StickCの電源を入れ直す必要がある。(esp32のリセット)
この原因は、以前のesp32RMT設定がクリアされず、再度同じチャンネルのesp32RMTのオブジェクト作成を指示したためと思われる。
異なるチャンネル(8チャンネル使える)を指定するとエラーとならないので、テスト中はチャンネルを変えてみると良い。
★ M5stickCにダウンロードしたファイルをREPLで削除するには、
import os
chdirでディレクトリーを移動
os.chdir('/flash/res')
rmdirを使ってファイルを削除
os.rmdir(filename)
|
REPL(テラターム)画面でファイル削除
|
★ UIFLOWでPython画面にするとM5stickCのファイル管理(確認、消去)ができる【10/17追加】
Python画面時のFileManager
|
N サイバーナビ用通信モジュールの期限切れ
by fjk
車のナビにAVIC-CW-902-Mを使っているが、9月いっぱいで通信モジュールであるND-DC2の契約期間が切れ、通信機能が使えなくなった。前回までは、専用SIM(3G)を購入できたが、このSIMは既に販売を終了しており、入手できない。また、他の通信ユニットも対応していないとのこと。
サイバーナビはそんなに使いこなしているわけではないが、出来れば通信機能を続けて使いたいと思い、契約期間が過ぎた場合の対応について調べて見ると、以下の3つの方法があることが判った。
- @ 新らしいSIMの購入
- A Bluetoothによるテザリング接続
- B WiFiによる接続
@は対応SIMが既に入手できないので、AおよびBについて検討する。なお、A,Bでは@に比べて使用できる機能が限られ、特にオンラインマップは利用できない。
- Bluetoothによるテザリング・・・A
手持ちのスマホなどのテザリング機能を使う方法で、費用はスマホの通信料のみとなる。
なお、Bluetoothプロトコルは PAN-NAPプロファイル対応のスマートフォン
- WiFiによる・・・B
車内にWIFiルータをセットし、ナビやスマホ、パソコンなどもWiFi接続で使うことが出来る。
今回は、abc879で紹介したモバイルルーターFS030Wがあるので、以下の手順でWiFi接続を行った。
- @ FS030Wの電源をOnにし、LTE受信ができることを確認
- A AVIC-CW902で、HOME画面を表示し、「AV・本体接続」にタッチ
- B「WiFi設定」にタッチ(WiFiがOFFなら「WiFi」をタッチしONにする)
- C「WPS接続」をタッチする
- D WPS接続ボタンを押すよう指示が出るので、FS030WのWPSボタンを押す
- E しばらくすると、登録に成功し、接続端末名と、無線アイコンが表示された
と、無事接続に成功し(無線アイコン表示)、サイバーナビの通信機能が使えるようになった。
・なお、自動接続をONにしておくと、以後は準備が出来ておれば、自動で接続される。
・車には専用クレドール(CRDFS030W、4,250円)をダッシュボード上に接着テープで固定し、本体を差し込んだ。
LTEで接続中のFS030W
|
ネット(LTE)に接続中
|
- ※パイオニアDCT-WR100Dによる接続
- DCT-WR100Dはパイオニア用なので、接続に安心感があるが、
@ microSIMは使えないので、別途(nanoUIM)接続料金が発生、
A 車両が60分以上停止時に接続が切れる(切り忘れ防止出来るが・・)、
とあり、キャンカーでは停止時でもWiFiでタブレットを使いたいので、今回はパス。
しかし、降車時に、電源OFFを忘れそう!!
※サイバーナビで通信機器を使うと以下の機能が使用できる
- スーパールート探索
- 天気情報の取得
- スマートループ渋滞情報の取得
- オンデマンド渋滞情報の取得
- 専用サーバー利用の地点検索(フリーワード検索、フリーワード音声検索、駐車場満空情報、スポット周辺、ガススタ価格情報、テレビdeみ〜た)
- 専用サーバーから取得した情報の表示(ガススタ価格情報、駐車場満空情報)
- スマートループ アイ スポット情報の取得
- 楽曲情報の取得(Gracenoteデータベース)
- MapFan連携機能(スポットフォルダ、スポットリザーブ、ドライブプラン受信、マイカーシーク)
※ 本レポートの参考・利用は、あくまでも自己責任でお願いします。