Arduinoを使った自己満足電子工作およびプログラミングを綴ったブログです。素人独学でいろいろチャレンジしてます。ここで記載しているソースコードは無保証です。@mgo_tec﻿メニューとウィジェットTwitterinstagramRSSお知らせ自作ライブラリESP32_mgo_tecを1.0.71に更新。(2020/02/10)自作ライブラリ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アソシエイトというアフィリエイト宣伝プログラムの参加者です。いうアフィリエイトサービスにも参加しました。ブラッシュアップしてみました。News記事をボタンで選択できるようにしてみました。ボタンを押すと、Newsセレクトボックスが表示されるというやつです。それだけのことなんですが、私にとっては結構難しかったです。以下の動画をご覧ください。スポンサーリンクいかがでしょうか。ILI9341モジュール(SDカードスロット付き)で組んだものでも試しています。Aボタン瞬時押しで、変更したいニュース表示行セレクトボックスが表示され、更に瞬時押しすると、セレクトボックス内のカーソルを移動し、長押しで決定します。セレクトボックスが表示されます。ニュース種類は9項目あり、最初のページは5項目表示され、カーソルを移動していくと2ページ目の残り4項目のセレクトボックスが表示されていることが分かると思います。この操作をボタン一つで実現してみました。セレクトボックスを表示するだけならばそれほど難しくありませんが、項目が多い場合2ページ目を表示させることが難しかったです。最初にセレクトボックスを表示する時に、現在選択されているニュース位置にカーソルが予め移動しているというところです。これにはかなり頭を使いました。我ながら良くできたと思います。ここだけプチ自慢したいです。ここまで来ると、単なるアプリ開発と化しています。作った人たちはスゲーなぁ、と思いました。表示を凝りたいなと思いましたが、ユーザーインターフェースを突き詰めすぎると泥沼化してしまうので、適度に開発を打ち切ることが肝心と思いました。それと、今回はこれ以上にとっても苦労したところがあります。それは、自分のライブラリが、メインソースプログラムでもっとシンプル化できないかと気にするようになり、かなり時間をかけて自作ライブラリを大幅改良してしまったことです。ライブラリを作るノウハウとして、今回はとても良い勉強になりました。これについての詳細は次の項で語ります。スケッチをシンプル化することができました。用のサンプルスケッチも紹介します。これの使い方を説明してみたいと思います。ちなみに私は素人アマチュアです。不具合があるかもしれません。すべてのプログラムは無保証です。何かお気づきの点がありましたら、コメント投稿欄などでご連絡いただけると助かります。このブログの維持運営にご支援いただけると助かります。支援方法はこちらの記事をご覧ください。今回は、セレクトボックスを作った苦労よりも、それを忘れるくらい苦労したことをダラダラと語ります。スケッチが複雑になってしまいました。ライブラリのようにどうにか簡単にできないかと試行錯誤していました。過去にこのブログで上げたスケッチと互換性を保つことが不可欠だったのです。それが、ヘビー級に難しかったんです。使って宣言していました。これが、いざ、シンプル化しようとすると弊害になって、コンパイルエラーを吐きまくりました。フォルダにある全てのファイルの整合性を、コンパイラが余さずチェックしてしまうことです。していなくても、/src/フォルダ内のファイルや宣言に全ての整合性が無いと、コンパイルエラーが出てしまうのです。あって、どこかにグローバル定義が無いとコンパイルエラーが出ます。スケッチ上に関連するファイルの整合性が取れていれば、コンパイルが通るものだと今の今まで思い込んでいました。しなければ、他のファイルが整合性取れていなくても問題ないと思い込んでいました。フォルダ内のファイルを全てチェックするようなコンパイラオプション設定がされているようなのです。プリプロセッサの読み込み設定などもされているようでした。ネットでちょっと調べたところによると、コンパイラオプションによってプリプロセッサ定義の挙動が異なるらしいのです。定義しても、なぜか全然効かず、意図した動作にならなくて、悩みに悩みました。結局のところ、私自身がコンパイラの挙動をただ単に知らなかっただけなのです。コンパイラの挙動に合わせてライブラリを作成しなければいけなかったんです。スケッチプログラムが使えて、新しいプログラムではスケッチのシンプル化に挑戦してみました。ライブラリの構成に近いシンプル化ができたような気がします。プリプロセッサの使い方はこれで良いのかどうか分かりませんが、コンパイルに一切警告表示が出ていないので、自分的にヨシとします。ライブラリを作る上で改めて思ったことは、ひとつのライブラリに複数の機能を持たせない方が良いということです。純正ライブラリはそのように機能別に分かれていますね。純正ライブラリは、多機能ながらよく作られていると思いました。プリプロセッサが沢山使用されています。何でそんなに使うことがあるのかと疑問に思っていましたが、今回はようやく分かりました。要するにコンパイラの挙動をコントロールしていたんでしょうね。いうことで、無知ゆえの個人的な苦労話でした。今もまだ試行錯誤中ですが、今後もライブラリのシンプル化にはチャレンジしていきたいと思っています。コネクタ搭載の全部入りモジュールです。Gray(9軸IMU搭載)スイッチサイエンスこれのレビューについては以下の記事を参照してください。カードが良いようです。カードは使えない場合があるようです。カードは使えるかどうか分かりません。カードにしておいた方が無難だと思います。大手メーカー製をお勧めします。粗悪な物も出回っているみたいなので、要注意してください。私の場合は以下のもので動作確認しています。明るさを暗めに設定すれば、5~6時間持つようになります。個人的に超おススメです。様リクエストにお応えいただきありがとうございます。最新となっていて、とりあえずインストールしました。インストールしようと解凍まではできるのですが、開こうとすると「初期化中...」とのメッセージとなり画面が消えてしまいます。PCの不具合なのか、プログラムの不具合なのかわからず困っています。ご指導いただけると幸いです。さんいつも世話になっております。出ていることを初めて知りました。情報ありがとうございます。1.0.0は、問題無く動作確認できました。インストールされていると読み取れます。インストールしていただければ良いと思います。ダウンロードして、その中のArduino.exeというファイルを実行させています。インストールされていたら、アンインストールされてからインストールしてみてください。フォルダがあると思います。初期設定が含まれています。フォルダのバックアップを取ってから、そのフォルダごと削除して再インストールしてみてください。動作確認ができました。モジュールでの動作確認をしており、ボタン操作もばっちりです。外付けのマイクロSDカードを使っているので、これからモジュール付属のSDカードスロットを使う方法を色々試してみたいと思います。いつも初歩的な質問ばかりで申し訳ありません。今後ともご指導の程よろしくお願いいたします。さん無事動いてよかったです。今回はライブラリを大幅修正して、いろいろ苦情が来そうな予感がしたので、ホッとしています。今回は我ながら自信作です。ニュースとのコネクションも延々と安定動作すると思います。セレクトボックスもこれからいろいろと応用が利きそうです。さんのリクエストで修正している最中に、いろいろ発見があり、新たな知識習得ができました。逆に切っ掛けを作ってくださり、感謝感謝です。いつも本当にありがとうございます。こちらこそ、今後ともよろしくお願いいたします。AMこんにちはFireBaseもこの実験もスムーズに再現できました。サンスマートのLCDもうまくいきました。LCDがili9341ドライバーのISPパネルの物がうまく働きません。画角とかは正常なのですが、色がすべて反転してるのです。値のうち何れかということですべてやりましたが色反転は同じです。RGB(0.0.0)で白、31.63.31で黒、0.61.31で赤というような表示です。AMマッキーさんいつもお試しいただき、ありがとうございます。!ボードによって反転する回路になっている場合もあるんですね。実行すれば良いと思います。それ用の新しい関数を追加しました。ダウンロードして、再インストールしてください。https://github.com/mgo-tec/ESP32_mgo_tec※古いライブラリはフォルダごと削除してから再インストールしてください。関数の後に、LCD.dispInversionOn();と入力して、コンパイル書き込み実行させてみてください。SDカードスロットの接続で試行錯誤しています。使用していませんでしたが、原因究明のため新たに購入し試してみたところ、テキスト通りの動作を確認できました。プルアップの追加をいろいろと試してみましたがうまくいきません。1kΩの抵抗を入れたら正常に読み込めるようになった」とのことで、試してみましたがダメでした。他に何か試せるようなことがありましたら、ご教示の程お願いいたします。さんいつもコメントありがとうございます。プルアップ抵抗がありませんね。プルアップ抵抗を入れれば良いような気がします。いうのは小さすぎるような気もしますが、良く分かりません。それ以下に下げてみて動くかですかね?今のところ、それくらいしかアドバイスできませんが、私ももうちょっと調べてみて、分かったらまたお知らせします。まで下げてみたところ動作確認できました。これから、ブレッドボードを3枚つなげて、LCD、ESP32-Devkit、押し釦を搭載したユニットが完成できそうです。いつも的確なアドバイスをいただきありがとうございます。クロックが鈍ってしまっている気がします。信号が読み取れないことが起こります。短い配線にしてみてください。問題無く動作すると思われます。ボードを180度回して接続してみました。つながることが確認できました。この状態で使用して問題ありませんでしょうか。周波数を上げる方策はありますでしょうか。アドバイスをいただけると幸いです。さんいつもありがとうございます。と共通線なので、LCD側が逆に長くなってしまっていると思われます。するとあまり意味ありません。MOSI線もトータル距離が短くならないと、インピーダンスが下がらないのです。線も短くする必要があります。この基板自体が、SDカードまでの回路が長すぎるので、その分、ジャンパーワイヤーも短くしないと辛いと思います。大きくなるとなかなか難しいですね。2.8インチですので、その分、LEDバックライトに多くの電流を使うと思われます。端子に入れた方が良いかもしれません。瞬間的に大電流が流れていることが想像されます。いうことは、それの電圧降下で、SDカードの電圧が足りなくなっている可能性があります。供給では、電源容量が足りていない可能性もあります。線も太く短い配線にしてみてください。SDカードの読み取りを悪くします。私の場合は、格安ブレッドボードやロープロファイルピンソケットを使った工作をしたことがありますが、接触不良が多く、殆ど読み取ってくれませんでした。替えたら、接触不良は殆ど無くなりました。いずれにしても、ブレッドボードはそういう問題が付き物ですので、高周波動作には限界があります。動作すれば良いと思います。言って保証外とも言えますが、それで動いているのでそのままにしていました。動作すればそれで問題ないと思います。これで試してみて下さい。PM追伸;それと、もう一つ。ものだと、読み取れる場合があります。ありますので、注意して購入する必要があります。中心付近に配置し、最短となるよう硬いジャンパーワイヤーでブレッドボード上を這わせるように配線し直してみました。達成することができました。ジャンパーワイヤを太く短くすることがこれほどの効果を上げるとは驚きです。大きい画面で試せることでこれからの新作発表が益々楽しみです。ご指導いただきありがとうございました。(^^)やっぱりジャンパーワイヤーでしたか。SDカードスロットまでの距離が無駄に長すぎますよね。こんなに大きな基板スペースがあるのだから、最短回路に設計すれば良いのにと思っていました。直列に接続されているので、プルアップ抵抗ではなく、その線の保護抵抗のようです。プルアップ抵抗は明記されていませんでした。プルアップする意味がありません。端子の抵抗値をテスターで測れば分かると思います。した回路図が欲しいですね。ユーザーに大いに助けとなると思います。こちらこそ情報ありがとうございました。今後とも何卒よろしくお願いいたします。PMjuchangさん3Dプリンターとブレッドボードを合わせた素晴らしい工作写真を投稿して下さり、ありがとうございました。juchangさんからご了承いただきましたので、ここで紹介させていただきます。SPI通信距離を出来るだけ短くして、SDカードの40MHz設定通信を実現したアイデアはスバラシイです。共用できるようにしてあります。大画面は迫力があり皆さんにお勧めです。最短で接続されているようです。これはなかなか考え付かないですね。3.2インチディスプレイに換装できるということで、納得です。おススメだそうですよ!!!juchangさんにはいつも工作を試していただき、感謝で言葉もありません。ホントにありがとうございます。PMmgo-tecさん。素晴らしい作品で尊敬します。プログラムをROMさせてもらっています。ウオッチバンド仕様にして下記のようにバッテリーを長持ちさせています。・CPUを80Mhzで動作させる。・記事更新を15分間隔にしている。フラグを見てスクロール処理しない。・ウォッチバンド付属の850mAh→1000mAhを入れている。これで、WIFIがOFFかつ画面消灯の時、消費電流43mAになります。CPUを80Mhzにした際、時刻のピンクの数字が多少崩れます。天才的なライブラリを見ても私ごときでは解読できませんでした。追加setup()の最終行に、rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M);を追加しています。引数は、RTC_CPU_FREQ_XTALRTC_CPU_FREQ_80MRTC_CPU_FREQ_160MRTC_CPU_FREQ_240MRTC_CPU_FREQ_2Mちなみに、RTC_CPU_FREQ_XTALは40Mhzですが、低消費電力なので動けば面白いのですがWIFI接続失敗するので、接続時のみ一時的に80Mhzにして接続したりして見ましたが、40Mhz時はtimelibが2秒で1秒を刻むため、時計が狂ってしまいました。シリアルモニタも半分のbpsになります。RTC_CPU_FREQ_2Mはスローモーションスクロールでした。PMsakuppiさん記事をご覧いただき、ありがとうございました。高度な改良で運用して下さっているようで、スゴイですね。CPUクロックを下げて作ったことが無いので、改良できるか分かりません。そもそも、デスクトップ用でフルパワー運用しか考えていなかったです。私の考えられる省電力は、スクロールの完全停止で、ボタンを押したらスクロールするとかですかね?いままで省電力プログラムは殆ど組んだことが無いので、全く分かりません。ピンクの数字は、速度が少しでも落ちると崩れてしまいますね。数字が動いている間に時刻受信したり、記事を受信したりすると数値が変わる場合があるので、高速処理が原則です。以下の記事https://www.mgo-tec.com/blog-entry-google-home-m5stack-realtime-message.htmlでは、スクロール時計を使うと崩れてしまったので、固定数字時計にしました。いうことで、全くアドバイスになりませんが、省電力化は私もこれから勉強していきたいと思います。来年の課題とさせてください。