Arduinoを使った自己満足電子工作およびプログラミングを綴ったブログです。素人独学でいろいろチャレンジしてます。ここで記載しているソースコードは無保証です。@mgo_tec﻿メニューとウィジェットTwitterinstagramRSSお知らせ自作ライブラリESP32_mgo_tecを1.0.70に更新しました。新型M5StackのIPSディスプレイに対応しました。詳しくはこちらの記事をご覧ください。ESP32のloop関数内はデフォルトでウォッチドッグタイマ無効でした。こちらの記事を修正しました。導入したため、右下にそのロゴが出ています。(2019/12/10)Google自動広告を停止し、従来の表示に戻しました。(2019/12/08)Googleさんのお勧めにより、AIによる自動配置広告をテスト中です。広告が多めに出ていると思いますのでご容赦ください。(2019/12/05)ESP32データシート独自和訳記事を新設しました。(2019/12/4)ESP32テクニカルリファレンスマニュアル独自和訳ページを更新しました。メモリやキャッシュ関連を追記しました。(2019/12/4)こちらの記事にコメント投稿があり、誤りを修正しました。Eventsスケッチ例を追記しました。Development版v1.0.4-rc1が出ていますよ。リリースされています。(2019/10/01)ESP32トラブルシューティング記事を更新しました。v1.0.3がリリースされました。ボードマネージャから更新できますよ!(2019/09/18)ESP32トラブルシューティング記事を更新。MD5エラーについて追加しました。Development版1.0.3-rc1がリリースされています。(2019/05/19)ESP32-WROOM-32のSPIFFSサイズアップ方法のこちらの記事に追記しました。場合、アップローダープラグインは1.0を使って下さい。(2019/05/06)ESP32とSSD1306のこちらの記事のソースコードを修正しました。正式リリースされました。(2019/04/17)電波時計関連のこちらの記事にLEDC(PWM)関数で作った別のソースコードを追記しました。(2019/04/04)LC共振回路の計算ツールページとRCローパスフィルタ回路計算ツールを作成してみました。リリースされています。デベロッパーサイトの再申請が必要になりました。こちらの記事も大幅変更しました。Developersページがガラッと変わりました。APIが上手く使えない場合、こちらを参照してください。(2018/08/19)先月号に引き続き、工学社さん技術情報誌I/O(アイオー)2018/04号にもこちらの記事を転載して頂きました。有難うございます!こちらの記事を工学社さんの技術情報誌I/O(アイオー)に転載していただけました。ありがとうございます!Make:Japanさんにこちらの記事が紹介されました。ありがとうございます。プロフィールこのブログはRapidSSLのSSL認証を取得しています。支援のお願い投げ銭感覚で気軽に支援していただけると嬉しいです。支援方法はこちらの記事参照。広告表示について当ブログでは広告表示しております。このブログの維持運営のためには必要不可欠です。Adsenseという広告配信サービスとAmazon.co.jpアソシエイトというアフィリエイト宣伝プログラムの参加者です。いうアフィリエイトサービスにも参加しました。いう情報がありました。以下のページを参照して、Flashメモリサイズを確認しておくことを強くお勧めします。チップ・メモリ・MACアドレス情報確認方法(2017/10/2)さて、大晦日になってしまいました。昨日、記事をアップしたばかりで散々疲れ果てたのに、勢いで今年最後の記事をアップしてしまいます。単体LEDをスイッチサイエンスさんのESP-WROOM-02開発ボードに接続して、WebSocket通信してみました。スマートフォンのジャイロセンサーとタッチで怒涛のように操作しまくってみました。これのソースコードを公開してみようと思います。バージョンを紹介しました。今回はそれを使って、HTML5のCanvas要素をふんだんに使ってLEDドットマトリックスを制御してみました。動画はこんな感じです。Chromeで、高速CPUスマートフォンでないとこの様にうまくいきませんが、Wi-Fi通信にしては結構良く追従してくれますね。後半は怒涛のようにジャイロセンサーとタッチセンサーを同時制御していますが、WebSocket通信も途切れずに無事に双方向ストリーミング通信しているのが分かると思います。余りに度が過ぎた操作をするとさすがに通信遮断される場合があります。それと、ESP-WROOM-02とスマホの距離が近すぎたり、近くにWi-Fi電波を飛ばすものが沢山あったりすると通信が途切れるようです。この動画ではかなり近い位置ですが、何とか大丈夫でした。・・・ていうか、このブログで上げている動画ではみんな距離が近すぎますね。双方向通信のWebSocketですから、送信機同士があまりにも近いと、そりゃぁ通信エラーになると思います。この辺も頭に入れてテストしなければいけないですねぇ・・・。因みに、iOSではうまくいきません。何度もテストしましたが、途中で通信遮断が起きますのでご了承ください。iOSユーザーの方は通信遮断が起きない方法を編み出したら、ぜひ教えていただきたいですね。Canvas要素の使い方はネット情報でもある程度体得できますが、さらに確実に知識に入れるためには私はこの本を参考にしました。HTML5&CSSも身に付く!インプレス電子書籍版もあるので、とても重宝しました。JavaScriptだけでなく、Canvas要素の使い方も多く紹介されており、素晴らしいです。本題を順番に解説していきます。)(スイッチサイエンス)過去の記事から散々紹介してますが、やっぱりまだまだ紹介しまくりますよ。何といっても全部入りのボードでこちらで新たに調達する部品が格段に少なくて済むのが素晴らしいです。動作もメチャクチャ安定している超おすすめボードです。Science)すごく売れいて、すぐに在庫切れしてしまうようです。スイッチサイエンスさんのホームページで入荷通知を受け取る設定もできますのでそちらも利用してみてください。Matrix以下の物をつかいました。5V程度のもの※3.3Vの電圧をかけても12mA未満の電流のものを使ってください。12mA以上流れるものは、直列に電流制限抵抗を入れてください。●場合によって、固定抵抗(LED電流制限用)●その他、ブレッドボード、ジャンパーワイヤー、2.54mmピンヘッダ(ESP-WROOM-02開発ボード用)●高速CPU最新スマートフォン(Android4.4.2以上)※iOSでは通信が途中で途切れます。Chromeブラウザ接続するドットマトリックスの組み立ては過去の記事をご覧ください。ESP-WROOM-02開発ボードはピンヘッダを別途購入してハンダ付けするだけです。接続図は下図の通りです。ドットマトリックスのLEDドライバHT16K33は推奨電圧は5Vですが、3.3Vでも問題なく動作します。ESP-WROOM-02が3.3V駆動なので、それに合わせてます。スイッチサイエンスさんのESP-WROOM-02開発ボードは5V出力やVINがあるのでいろんな使い方ができますね。ご注意いただきたいのは、LEDを直接接続しているところです。)のGPIO端子に流せる電流の最大値は12mAです。3.3Vの電圧をかけても12mA未満の電流のLEDを選択するか、または電流制限抵抗を直列に接続してください。Developerが即壊れる場合があります。USBからの電源供給だけでこれだけのデバイスを駆動するとなるとWi-Fi通信電力も心配になるところですが、意外と問題ありませんでした。試しにVINに大容量電源をつないでみましたが、通信状態はあまり変わりませんでした。Beta1.1をインストールするこれは前回の記事を参照してください。ライブラリはGitHubのこちらのページにあります。IDEはArduino.ccページのIDEを使用してください。バージョンは必ず1.6.5を使用してください。他のバージョンでは正常に動作しませんのでご注意ください。ボードとSPIFFSファイルシステムツールも予めインストールしておく必要があります。インストール方法記事が飛び飛びになっていてすみません。ソースコードを入力する上記のライブラリをインストールしたら、下図のサンプルスケッチを開きます。次にこれを一旦保存します。その次に、保存したフォルダの中のdataフォルダに入っているspiffs_01.txtというファイルだけ必要なので、サンプルスケッチは削除して、以下のソースコードをコピペします。spiffs_01.txtというファイルはブラウザへ送信するHTMLヘッダです。e00.stopPropagation();\r\n";//他の要素に伝搬しないようにする。event11.alpha;\r\n";//今回はこの値は使っていない。//HT16K33-28Wは8X8マトリックスLEDを2台まで制御できる。アドレスは0x70から設定する。//2つ目のドットマトリックスの場合はここでバイトを送る。自由ですが、ライセンス表記はしておいて下さいねというものです。ネット社会では表記しない方が自由に配布できないようなので、表記しておきました。(実はライセンスの知識は私はあまりありません・・・)17~18行目のSSIDとパスワードはご自分のルーターの環境に合わせて書き換えてください。AdafruitさんのLEDマトリックスのI2C通信制御に関してのソースコードの意味は過去記事を参照してください。クセのあるデバイスでした。Bata1.1ライブラリ関数のews.EWS_Canvas_Slider_Tというものは、多量のJavaScriptタグ文字列を返すので、すぐに1つのStringクラスのメモリが満杯になってしまいます。ews.EWS_Canvas_Slider_T関数は1つのStringクラスに2つまで追加できます。それ以上だと文字列排出が不十分で、ブラウザでちゃんと表示されませんのでご注意ください。Canvas要素の記述です。これに関してここで説明してしまうととても書ききれません。これはネットで沢山の情報があるので、説明は割愛させていただきます。重要なのはevent.preventDefault();event.stopPropagation();などを使って他のイベントと競合しないようにすることです。スマホのジャイロセンサーイベントとタッチイベントがかなり頻繁に発生しますからね。それと最重要なのが、ESP-WROOM-02へデータを送信するdoSenddoSend_canvasという関数です。これはHTMLヘッダのspiffs_01.txtファイルに記述してありますが、全く同じ重複データを送信しないようにしています。それと、送信待ちバッファが無い時にだけ送信するようにしています。ここまですればWebSocket通信遮断は起きないだろうと思いそうですが、iOSだけはそれでも切断されてしまいます。これは私では全くのお手上げでした・・・。この原因が解る方は教えていただきたいですね。その他のライブラリ関数使用方法は前回の記事を参照してください。次に、下図のようにこのスケッチのフォルダを開きます。次にdataフォルダを開きます。次にspiffs_01.txtファイルをテキストエディタで開きます。この中のローカルIPアドレスをご自分のルーターが割り当てたESP-WROOM-02のローカルIPアドレスに書き換えます。メモ帳で開くと下図のようにうまく改行されていませんが、以下のようなところのIPアドレスを修正します。修正が済んだら保存しておきます。ESP-WROOM-02へspiffs_01.txtファイルをSPIFFSファイルシステムアップローダを使用してフラッシュに書き込むそして、コンパイルする。前回の記事でも述べましたが、予めIDEにインストールしてあるSPIFFSファイルシステムアップローダーを使用してspiffs_01.txtファイルをESP-WROOM-02のフラッシュに書き込みます。書込み開始すると白い点々が出ますので、それが停止したら書き込み完了です。その後にスケッチをコンパイルします。コンパイルが済んだらブラウザのURL入力欄にローカルIPアドレスを入力して動作を確認してみてください。上記の動画のように動作すれば成功です。SPIFFSファイルシステムを使うとコネクションが多少遅いですね。フラッシュから読み出してそれをブラウザへ送信するわけですからどうしても遅くなってしまうのは仕方のないところです。実は、ライブラリのサンプルスケッチにブラウザへ送信するHTMLファイルを全てSPIFFSファイルシステムにしたものを作ってみましたが、ハンドシェイク(コネクション確立)があまりにも遅くてブログで紹介できなかったんです。興味ある方は試してみてください。WebSocket通信というものはブラウザで双方向通信ができるので、端末を選ばずにできてとても都合が良いと思いきや、iOSとは相性が悪くて少々ガッカリでしたね。不意の切断が無く、サクサク動くようにするにはアプリ開発しか方法がないんでしょうかね。いうことで、今回の記事はここまでです。ブラウザとストリーミング通信を成功させたことでした。成功させたときには感動しましたねぇ・・・。それに、双方向通信のWebSocketは半分諦めていたのですが、これも執念で成功させました。ネットではほとんど記事が無かったので、満足度が高かったです。その反面、パソコンに釘付けになる時間が増え、精神、身体ともにガタガタになってしまいました。介護が本格的になるのに、ガタついている場合じゃありません・・・。来年はパソコンに向かいながら筋トレと日光浴とストレス解消ができる方法を考えていきたいと思ってます。いうことで、皆さま、本年は当ブログをお読みいただきありがとうございました。来年もなにとぞよろしくお願いいたします。最新記事ではWebSocketライブラリがバージョンアップして、格段に使いやすくなりました。現在BETA1.3です。こちらのページをご覧ください。PMあけましておめでとうございます。IOTの初心者でESP-WROOM-02を勉強中のものです。使ってみたいと思います。こんな貴重の情報の共有こころから感謝しております。AM方さん明けましておめでとうございます。新年、第1号のコメントありがとうございます。こちらこそ、記事をお読みいただき、感謝しております。今後とも何卒よろしくお願いいたします。記事を参考にさせていただき、勉強中です。Image...”と表示され、その後にエラーとなってしまいます。対処方法を教えていただけますと助かります。PMcherryさん記事をご覧いただき、ありがとうございます。バージョンはどれでしょうか?それと、ステータスのところのエラーメッセージは何と表示されてますでしょうか?お知らせくださいませ。が”nodemcu”になっていないと、アップロードできないということがありますので、その辺も確認してみてください。PM返信ありがとうございます。その後いろいろやってみたらできました。SPIFFS)にするとアップロードできました。(単体LEDマトリックス版)にチャレンジしていますが、WebSocketがうまくいってません。(単体LEDマトリックス版)ページで質問させていただきます。