2020年8月8日土曜日

ESP32-DevKitC-32D にobnizOSを入れる

windows10の環境で、秋月電子で扱っているESP32-DevKitC-32D(以下"ESP32"と記す)にobnizOSを入れる方法のメモです。

(公式の説明ではlinux環境での説明になっているため、コマンドのシリアルポート番号などを変える必要があります。また、コマンドの実行はコマンドライン(DOS窓)で行う必要があります。このあたりの作業方法の置き換えは、なじみがないと気づけないと思います)


公式の説明より、こちらの”公式サポートされたM5Stack+M5StickC用obnizOSをインストールしてみよう!”の説明の方が分かりやすいです。このページに従いM5Stackの部分を"esp32w"に置き換えて作業します。

以下、このページの補足を書き出しておきます。


obniz-cliのインストール

obniz-cliのインストールには

pythonのインストール

Node.js12以降のインストール

の2つのツールが必要になります。このツールをインストールした後で、パソコンを再起動します。(インストールの仕方は上記リンク先で確認してください)


再起動後、コマンドプロンプト(DOS窓)をひらいて、


"npm i obniz-cli -g"
と打ち込んでenterを押して実行します

(この後の説明でも、”コマンドの実行”は同様にコマンドプロンプト窓でコマンドを打ち込んで実行します)


・esptoolのインストール

コマンドプロンプト窓から
"pip install esptool"と打ち込んで実行します。


ESP32へのobnizOSのインストール

ESP32のCOM番号の確認

パソコンにESP32を接続します。


ここで、ESP32のCOMポート番号を確認します。
デバイスマネージャーで確認できます。


それか、コマンドプロンプト窓で、
"obniz-cli os:ports"
と打ち込めば、"COMxx"などとCOM番号が出てきます。

”COMxx"という文字列は、obnizOSのインストールで使用します。

obnizへのサインイン

の内容に従って作業してください。


obnizOSのインストール


コマンドプロンプト窓から
"obniz-cli os:flash-create -h esp32w -p COMxx"
と実行します。

最後の"COMxx"のxx部分は先に調べた番号に置き換えてください。
例 ”COM12”の場合は
"obniz-cli os:flash-create -h esp32w -p COM12"
となります。

ESP32のデバイスキーの取得

EPS32にインストールしたobnizOSを有効にするためには、obnizでデバイスを追加して、デバイスキーを取得し、そのデバイスキーをEPS32に設定する必要があります。

obnizの管理 - デバイス にある”+デバイスを追加”から登録をします。


ESP32へのobnizOSのインストールはすでに行っているため、”IDのみオンラインで発行”を選択します。

登録するとデバイスキーのダウンロードができますので、それを保管しておきます。
(デバイスキーはobnizID("xxxx-xxxx"の4桁+4桁”の番号とは別の物です)


ESP32へのデバイスキーの設定

ESP32をパソコンにつなげて、arduinoIDEのシリアルモニタで、


ESP32へデバイスキーの設定をします。
シリアルモニタの画面にデバイスキーの入力待ちになるので、デバイスキーを入力します。

その後、ESP32のwifiがアクセスポイントモードになります。シリアルモニタの画面にはブラウザで設定を行うためのIPアドレスが表示されます。スマホなどで、ESP32と直接wifi接続し、ブラウザでIPアドレスを入力するとルータへの接続設定画面が出ます。その設定を行うと、ESP32はobnizのサーバと通信をして、obnizへの登録が完了し、obnizデバイスとしてESP32が使えるようになります。

動作確認

obnizIDの確認

web画面からESP32を操作するときに必要になります。
htmlファイルに直接埋め込むか、web窓を開いたときに入力窓から設定します。

obnizのweb の右上にある"開発者コンソール”をクリックします。

登録したESP32のobnizIDを確認します。

上記画面の左側にある”プログラム”を押すとサンプルプログラムが出てきます。
これはobniz公式ボードのプログラムなのでそのままでは使用できません。


動作確認用回路


サンプルプログラム用のESP32へのLED配線
io0: obnizOS動作確認用LED (htmlからの指示で1s毎に点滅)
io5: obnizOS動作確認用LED (web画面のボタン操作で点灯・消灯)
io23: arduinoプログラム動作確認用LED (arduinoプログラムの指示で1s毎に点滅)

ioxx --- (アノード)LED(カソード) --- 抵抗:1kΩ --- ESP32のGND
と配線してください。

ESP32への給電はUSBコネクタから行います。 



obnizOSの動作確認


パソコンのローカルファイルとしてhtmlファイルを作りそれで実行します。

htmlファイル( "test.html"などと拡張子を"html"として保管する)

<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="/css/starter-sample.css" />
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@3.7.0/obniz.js" crossorigin="anonymous"></script>
</head>

<body>
<div id="obniz-debug"></div>

<div class="wrap">

<div class="switch">
<h3 class="text-center">Swtich</h3>
<span id="print">undefined</span>
</div>

<div class="led">
<h3 class="text-center">Turning on a LED</h3>
<button class="btn btn-primary" id="on">LED ON</button>
<button class="btn btn-outline-primary" id="off">LED OFF</button>
<dl>
<dt>Demo Pin assign</dt>
<dd>- SW: io5:LED anode</dd>
<dd>- auto 1s: io0:LED anode</dd>
<dd>- Switch state will be printed on browser</dd>
</dl>
</div>
</div>

<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {

$("#on").click(function () {
// obniz.io0.output(1); // この命令では応答しなかった
obniz.getIO(5).output(1);
$("#print").text(1);
});

$("#off").click(function () {
// obniz.io0.output(0);
obniz.getIO(5).output(0);
$("#print").text(0);
});
};

var num3 =0;

var priod1 = function () {
num3++;
if (num3 % 2 == 0) {
obniz.getIO(0).output(1);
}
else {
obniz.getIO(0).output(0);
}

};
setInterval(priod1, 1000);

</script>
</body>

</html>

これをパソコンのローカルドライブに保管して実行するとwebに操作画面が現れる。
この画面が出ている間、
io0のLEDは1秒ごとに点滅を繰り返す。
io5のLEDはweb画面の"LEDON", "LEDOFF"のボタンを操作すると点灯・消灯する。


arduinoプログラムとobnizOSの共存実行


obnizのドキュメント(obnizOS)を参考に、arudinoIDEの設定を行います。



arduinoのスケッチ例にobniz - led_blink があるのでそれを流用します。
 
サンプルプログラムではpin 番号が"12"になっているので"23"に変えます。
(ここは自分の配線に合わせて番号をつける)

#include <obniz.h>
void setup() {
  Serial.begin(115200);
  obniz.start();
  pinMode(23, OUTPUT);
}
void loop() {
  digitalWrite(23, HIGH);
  delay(500);
  digitalWrite(23, LOW);
  delay(500);
}


コンパイルしてESP32に書き込みます。

この状態で、webからの操作でのLED点滅(io0, io5)とarduinoプログラムでのLED点滅(io23)が行われます。

以上で、ESP32へのobnizOSのインストールと動作確認を終わります。





























2020年7月25日土曜日

M5stackにobnizOSを入れる

公式Webの説明にはなかった作業ポイント

M5StackにobnizOSをインストール・設定をする前に、obnizの”開発者コンソール” - ”デバイス” - ”+デバイスを追加”からデバイス登録をしておく。
登録すると、デバイスキーデータファイルをダウンロードできる。

これは、インストール後に手動でデバイスキーの設定をするため。(ダウンロードしたtxtファイルの中にキーが記録されている)


公式、ユーザの説明では、デバイスキーの設定については説明がありません(自動で設定されるのだと思います)が、私の場合は、M5stack画面の表示が出ず、wifi設定などに進めませんでした。

これの対応では、
M5StackをUSBSerialでコンソール接続(115200bps)するとデバイスキー入力の
M5StackにobnizOSのインストールが完了した後に、PCからusbCOMでターミナル接続して、デバイスキーの入力画面が出るので、そこからキーを入力しました。

そのあとでM5Stackをリセットすると、LCD画面に表示が出ました。
この後は上記のユーザのWebの説明に従ってwifi設定ができました。

2020年7月12日日曜日

音声合成ソフト(AquesTalk)はaruduinoIDE(1.8.13)では動かない

概要

音声合成ソフトのAquesTalk(製造元はこちら)
https://www.a-quest.com/products/aquestalk_pico_esp32.html

にはESP32で動作するlibraryがあります。
このページではlibraryファイルの登録を手動で行う指示となっており、作業が煩雑になります。
これを改良して、通常のユーザーlibraryとして扱えるようにしたlibraryパッケージにしたものがこちらのサイトにあります。
https://lang-ship.com/blog/work/aquestalk-esp32/

このlibraryですが、aruduinoIDE(1.8.13)では動きません。

コンパイルすると
"The plaform does not support 'compiler.libraries.ldflags' for precompiled libraries."
と表示が出て、その後 AquesTalkのlibraryに登録されている関数がない("undefined reference)のエラーになります。



代わりにaruduino(1.8.12)なら動作します。


参考

AquesTalk pico for ESP32(AquesTalk-ESP)

Library specification









2020年7月11日土曜日

ESP32で実行ファイル(binファイル)を直接書き込む

概要


arudinoIDEを使ってESP32のプログラミングをするときには、arudinoIDEが自動でESP32への書き込みを行います。

複数のESP32への書き込みでは、arudinoIDEを使わず、実行ファイル(binファイル)だけで書き込みをしたいです。

このための方法がこちらのwebで紹介されています。
http://k-hiura.cocolog-nifty.com/blog/2019/06/post-17ebf9.html

ここで紹介されているbatファイルから、batファイルへのCOMNoの設定、binファイル名の設定をしなくて済むように書き換えました。

書き換え内容は

  1. COMNoはbatファイル実行中に直接入力する方式にする
  2. binファイル名はbatファイルが置かれているフォルダにコピーしたbinファイルを自動で取得する方式にする。
です。

書き換えしたbatファイルの内容
set /P COMNo="COM No Input = "
Echo.
for %%A in (*.bin) do (
    Echo wirte file = %%
    Echo.
.\esptool.exe --port COM%COMNo% --baud 921600 ^
     --chip esp32  --before default_reset --after hard_reset ^
     write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect ^
     0x10000 ./%%A)
    
 pause


書き込み環境の準備

こちらにあるサンプルフォルダをダウンロードしてください。
https://drive.google.com/drive/folders/1EzbIrtbbzSeT9MBrrouXGA4fGCKtVhR2?usp=sharing

このサンプルフォルダには、ESP32の23Pinに対してHi/Lo出力するプログラム(blinkTest.ino.esp32_500ms.bin)が入っています。ESP32の23PinにLEDを接続しておくとLEDが点滅します。


書き込むbinファイルはESP32Write.bat が置いてあるフォルダにコピーしてください。
(binファイルは必ず1つだけにしてください。複数あるとどれを書き込めばよいかわかりません)


フォルダにあるファイル一覧


  1. ESP32Write.bat (このファイル) : このバッチファイルを実行するとESP32にプログラムを書き込む
  2.  esptool.exe : 書き込みプログラム本体 arduino IDEからコピーしてきたもの (C:\Users\USERNAME\Documents\ArduinoData\packages\esp32\tools\esptool_py\2.6.1 にあった)
  3. *.bin : EPS32に書き込むプログラムファイル arudiono IDEで作成したものをコピーしておく (arduino IDEで "スケッチ - コンパイルしたバイナリを出力" でファイル出力できる)


書き込み手順


  1. ESP32をUSBでパソコンに接続する
  2. USB Serialとして認識されるのでそのCOMNoを調べる
  3. コントロールパネル - デバイスマネージャー - ポート(COMとLPT) にCOMNoが出てくる
  4. ESP32Write.batをダブルクリックして起動する
  5. "COM No Input=" と表示が出るので、COMNoの数字部分を入力してenterを押す( "COM12"なら"12"を入力)
  6.  書き込み処理が開始され、終わると 
  7. "続行するには何かキーを押してください・・・”と表示されるので何か入力すると窓が閉じる
  8. 書き込みが完了するとESP32に書き込んだプログラムが自動で実行される








"sample_bin"フォルダには1s周期で点滅する"blinkTest.ino.esp32_1s.bin"があります。binファイルを差し替えれば、点滅周期が変わり、binファイルの書き換えができることが確認できます。

補足

arduinoIDEが作成するbinファイルの取得方法

コンパイルするときに, ”スケッチ - コンパイルしたバイナリを出力” を選択する。
生成されるbinファイルは、”・・・ドキュメント\Arduino・・・”以下のフォルダにある。

参考資料

esp32 arduino バイナリ配布 

このWEBのBATファイルを元にCOMポートの入力と、binファイルの自動取り込みを追加した
http://k-hiura.cocolog-nifty.com/blog/2019/06/post-17ebf9.html

以下はコマンドプロンプトの使い方の参考web

batfileの起動方法
exploerの窓のアドレスが表示されている横長の窓で、アドレスを消して"cmd"と打つとコマンドプロンプトが起動する
https://www.adminweb.jp/command/ini/index1.html#section5

batファイル実行中にdataを入力する
http://park1.wakwak.com/~ima/windows_tips0004.html
set /P INPUTDATA="data input="
とすると%INPUTDATA%に入力した文字列が入る

batファイルに引数を持たせる
https://www.adminweb.jp/command/bat/index6.html

batファイルの中でファイル名を取得する (検索文字列: "環境変数 ファイル名取得")
for %%変数名 in (検索対象ファイル名) do echo %%変数名
http://www.yamatyuu.net/computer/program/bat/for_files.html

dosコマンド一覧
https://www.pg-fl.jp/program/dos/doscmd/





2020年7月5日日曜日

wio XIAO のuf2による実行プログラム書き込み

概要

arudinoIDEを使えば、コンパイルからボードへの書き込みが行えますが、実行ファイルだけを配布・書き込みしたい場合があります。

wioXIAOはパソコンにUSB接続して、ボードのRESET端子を2回連続でショートするとパソコンからUSBメモリとして認識され、出てきたドライブにbinファイルを変換して作ったuf2ファイルを書き込むとボードへのプログラム書き込みができます。

この手順をまとめておきます。(windows10)

必要なものとインストール・ファイルの準備

書き込むbinファイル

arduino IDEで作成する
(例として、サンプルプログラムのLED点滅のプログラムを使った)



コンパイル後に実行ファイル(binファイル)をファイルとするために
"スケッチ - コンパイルしたバイナリを出力 
を選択してコンパイルする。


実行ファイル(binファイル)
"ドキュメント - Arduino - プログラム名"
のフォルダに保管されている
(ここでは BlinkWithoutDelay.ino.XIAO_m0.bin という名称になっている)


uf2

 binファイルをuf2ファイルに変換するツール。pythonで動作する。


”Download ZIP"でダウンロードする。


解凍して "uf2-master - utils - uf2conv.py"
arudinoの実行ファイル(binファイル)のあるフォルダにコピーしておく



uf2を動作させるためのpython動作環境.20/07/05での最新Ver=3.7で動作した。


リンク先の説明に従ってインストールファイルをダウンロード&インストールする。

インストールの時には、"Add Python 3.7 to PATH"にチェックを入れる。
binファイル変換の時にDOS窓のコマンドラインで処理するため)


binからuf2ファイルの作成

コマンドプロンプトでbinファイルのあるフォルダに移動して、そのフォルダでuf2conv.pyを起動します。

コマンドプロンプトの起動



”Windownsシステムツール - コマンドプロンプト
を選択

binファイルのあるフォルダへの移動


"CD "と入力した後で、exploerbinファイルのあるフォルダをドラック&ドロップすると、フォルダ名が入力される。この状態で"Enter"を押す。

"CD"コマンドについては、こちらを参照
binからuf2ファイルへの変換操作


"python uf2conv.py -c -o filename.uf2 finename.bin"

filename.uf2 : 返還後のuf2ファイルの名称
filename.bin   : arduinoIDEが作ったbinファイル名

-c, -o :これらのコマンドオプションの詳細は不明。こちらのwebを参照した


uf2conv.pyのコードの中にコマンドオプションのコードがあった




uf2ファイルの確認



binファイルのあるフォルダにuf2ファイルができていることを確認する。

uf2ファイルのボードへの書き込み


XIAOを書き込みモードに入れる

製造販売元のwebにあるように、ボードのRESET端子を2回連続でショートすると書き込みモードに入る。そうするとパソコン上にドライブが現れる。





uf2ファイルをarduinoドライブにコピー

ボードをRESETして現れたドライブにuf2ファイルをコピーする。これで書き込みができる。uf2ファイルの書き込みが完了するとパソコン上のドライブは消えて、ボードのプログラムが動作する。

uf2に関する参考Web

ハンディバーサライタ PovRanianの表示映像生成フォームの仕組み

Wio Terminalの実行ファイルを配布するなら.UF2
wio terminalでのuf2での書き込み方法

2020年6月6日土曜日

wio terminalメモ


20/06/07

seeed_line_chart のサンプルプログラム"basic"でコンパイルエラーになる


エラー内容

error: 'value' function uses 'auto' type specifier without trailing return type
     auto & value(std::vector<doubles> const & items){

関数の引数が足りないと言ってくる

対応

の投稿内容で対応できた。

platform.txtを探し出す


C:\Users\userName\Documents\ArduinoData\packages\Seeeduino\hardware\samd\1.7.5\platform.txt

("userName" は各自異なる)

その中の一行を書き換える

compiler.cpp.flags=-mcpu={build.mcu} -mthumb -c -g -Os {compiler.warning_flags} -std=gnu++11 -ffunction-sections -fdata-sections -fno-threadsafe-statics -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -MMD -D__SKETCH_NAME__="""{build.project_name}"""

赤字の"-std=gnu++11" 部分を
"-std=gnu++14"
に書き換える

2020年5月30日土曜日

ESP32-DevKitC + FT232HL + VScode+PlatformIO で arudino のデバック

こちらの「VSCode+PlatformIOを使ったESP32のデバック開発環境」
を参考に、秋月通商で扱っている

ESP32-DevKitC ESP-WROOM-32開発ボード

FT232HL ハイスピードUSBシリアル変換モジュール(JTAGアダプタ)

に適用して、arudinoの環境でのデバックができました。

手動設定が必要なのはFT232HLのVID,PIDの値をPlatformIOの設定ファイルに反映させることでした。

VID,PIDの確認
設定-コントロールパネル-デバイスマネージャ-ユニバーサルシリアルバスデバイス

にある"SingleRS232-HS"(これはZadig でドライバ変更時に設定される名称)
プロパティ-詳細(窓)-プロパティ-ハードウエアID から確認できる


PID,VIDの通知を
C\Users/username/.platformio/packages/tool-opencd-esp32/share/opencd/scripts/interface/ftdi/esp32_devkitj_v1.cfg

にある
"ftdi_vid_pid 0x???? 0x????"
に設定する