M5Stack と ESP32 のボタンで記事を選択できる Yahoo News 電光掲示板 天気予報 Watch

記事公開日:2018年10月8日


スポンサーリンク

コンパイル書き込み実行

では、このスケッチをコンパイル書き込み実行させてみてください。

先に述べたように何度も言いますが、このスケッチでは WIFI_OFF にしているので、Arduino IDE の「ツール」の Core Debug Level “なし” にすることを忘れないでください
それ以外にしてしまうと、いずれ heap メモリを使い果たし、勝手に再起動してしまうので要注意です。

うまく実行できたら、最初に紹介した動画のようになっていればOKです。
操作方法は以下の通りです。

selectbox_m5stack_esp32_02.jpg


B ボタンの瞬時押しを連打すると、上段の News 記事のスクロール速度がダウンします。

B ボタンをずっと長押ししていると、上段の News 記事のスクロール速度がアップします。

C ボタンは下段の News 記事のスクロール速度調整です。

一番上の Status メッセージ表示は、Web アクセス中は黄色文字で “??” と表示されます。
コネクションに失敗すると赤色表示になります。

最初にAボタンを瞬時押しすると、以下のような表示になります。

selectbox_m5stack_esp32_03.jpg


この状態でさらに瞬時押ししていくと、カーソルが移動します。
News 0 は上段ニュース。
News 1 は下段ニュースです。

長押しすると決定(確定)です。
すると、以下のような表示になります。

selectbox_m5stack_esp32_04.jpg


前にも述べたように、現在の選択されているニュースにカーソルが移動していると思います。
(プチ自慢!)

ここで瞬時押しするとカーソルが移動します。
2ページ目に行くと以下のような表示になります。

selectbox_m5stack_esp32_05.jpg


これで長押しすれば決定(確定)です。

すると WiFi接続して Web にコネクションします。
確定後、News 記事が変更されるまで、少々時間がかかります
Status メッセージ表示でアクセス進行状況が分かると思います。

このセレクトボックスウィンドウが閉じると、元の画像が崩れるので、再描画しています。
これもポイントといえばポイントです。

ESP32 開発ボードと ILI9341 モジュール(SDカードスロット付き)を使う場合

ESP32-DevKitC や ESPr Developer 32 などの開発ボードと、TFT LCD ILI9341 モジュール(SDカードスロット付き)を使う場合は、M5Stack 用スケッチ(プログラム)を少々変更すれば使えます。
(※下のコメント投稿欄で、2.8インチの ILI9341 モジュールを使った読者の方がいらっしゃいます。合わせて参照してみてください。)

まず、私が使用したものは以下の通りです。

使ったもの

以前のこちらの記事のものと同じですが、念のためここでも紹介します。

ESP32-DevKitC
Amazon.co.jp
TFT LCD ILI9341 モジュール(SDカードスロット付き)

私は以下の物を使いましたが、あまりお勧めできません
理由は、こちらの記事を参照してください。

Amazon.co.jp

同じようなボードがたくさん販売されているので、みなさん色々試してみてください。
粗悪品もあるかも知れませんので注意です。

micro SDHC カードおよび SD カードアダプタ

この SD カードスロットは標準サイズの SD カード用なので、micro SDHC カードを使う場合は、SD カードアダプタが必要です。
M5Stack のところで紹介したものと同じですが、当方では以下の物で動作確認しています。
購入した当初は SD カードアダプタが付属していました。

Amazon.co.jp

タクトスイッチ

このタクトスイッチは押し心地が良く、ブレッドボード上でも安定するので、超お勧めです。

Amazon.co.jp

定電流ダイオード

LCD ディスプレイのバックライト LED 端子に接続します。
ESP32 の GPIO の定格電流が 12mA ほどなので、定電流ダイオード ( CRD ) 10mA のもので保護しておきます。

Amazon.co.jp

固定抵抗 100kΩ

プルアップ用です。
1/4W のものです。

ブレッドボード

サンハヤトさんの SAD-101 は、ESP32-DevKitC でも余裕があり、お薦めです。

Amazon.co.jp

スルーホール用テストワイヤ

これは、ILI9341モジュールにピンヘッダやピンソケットをハンダ付けするのが面倒な人用です。
あくまでテスト用です。

Amazon.co.jp

ジャンパーワイヤー
Amazon.co.jp

スポンサーリンク


「M5Stack と ESP32 のボタンで記事を選択できる Yahoo News 電光掲示板 天気予報 Watch」への22件のフィードバック

  1. mgo-tec 様

    リクエストにお応えいただきありがとうございます。
    Arduino IDE version 1.8.6 で動作確認とのことで、インストールしようとしたところ、すでに version 1.8.7 が最新となっていて、とりあえずインストールしました。
    「旧バージョン」のインストール手順に従って、version 1.8.6 をインストールしようと解凍まではできるのですが、開こうとすると「初期化中…」とのメッセージとなり画面が消えてしまいます。
    PCの不具合なのか、プログラムの不具合なのかわからず困っています。
    ご指導いただけると幸いです。

    1. juchang さん

      いつも世話になっております。

      Arduino IDE 1.8.7 が出ていることを初めて知りました。
      情報ありがとうございます。

      私の Windows 10 環境で、
      Arduino IDE ver 1.8.7
      Arduino core for the ESP32 stable ver 1.0.0
      は、問題無く動作確認できました。

      juchangさんのコメントから、最新版Arduino IDE 1.8.7 をインストールされたのに、なぜか再度 1.8.6 をインストールされていると読み取れます。
      おそらく、旧版 Arduino IDE は不要だと思いますので、アンインストールしてから 1.8.7 をインストールしていただければ良いと思います。

      私は installer でインストールせず、ZIP 形式で 1.8.7 をダウンロードして、その中の
      Arduino.exe
      というファイルを実行させています。
      一度 installer でインストールされていたら、アンインストールされてからインストールしてみてください。

      それでもインストールできない場合、Windows 10 の場合以下のパスのどれかに Arduino 15 または Arduino フォルダがあると思います。

      C:\Users\User-Name\AppData\Local
      C:\Users\User-Name\AppData\Roaming
      C:\Users\User-Name\AppData\LocalLow
      

      Arduino 15 フォルダは、Arduino core for the ESP32, ESP8266 関連フォルダです。
      IDE の初期設定が含まれています。
      Arduino フォルダまたは Arduino 15 フォルダのバックアップを取ってから、そのフォルダごと削除して再インストールしてみてください。

  2. mgo-tec 様

    Arduino IDE ver.1.8.7 で動作確認ができました。
    最近はぶっつけ本番で、ILI9341 LCD モジュールでの動作確認をしており、ボタン操作もばっちりです。
    まだ外付けのマイクロSDカードを使っているので、これからモジュール付属のSDカードスロットを使う方法を色々試してみたいと思います。
    いつも初歩的な質問ばかりで申し訳ありません。
    今後ともご指導の程よろしくお願いいたします。

    1. juchang さん

      無事動いてよかったです。
      安心しました。
      今回はライブラリを大幅修正して、いろいろ苦情が来そうな予感がしたので、ホッとしています。

      今回は我ながら自信作です。
      Core Debug Level “なし” に設定してコンパイルすれば、Yahoo ニュースとのコネクションも延々と安定動作すると思います。
      セレクトボックスもこれからいろいろと応用が利きそうです。

      juchang さんのリクエストで修正している最中に、いろいろ発見があり、新たな知識習得ができました。
      逆に切っ掛けを作ってくださり、感謝感謝です。
      いつも本当にありがとうございます。
      こちらこそ、今後ともよろしくお願いいたします。
      m(_ _)m

  3. こんにちは

    FireBaseもこの実験もスムーズに再現できました。
    サンスマートのLCDもうまくいきました。
    しかしLCDがili9341ドライバーのISPパネルの物がうまく働きません。
    画角とかは正常なのですが、色がすべて反転してるのです。
    1-13, 250, 251 の値のうち何れかということですべてやりましたが
    色反転は同じです。
    RGB(0.0.0)で白、31.63.31で黒、0.61.31で赤というような表示です。
    なにか解決法は無いでしょうか?

    1. マッキーさん

      いつもお試しいただき、ありがとうございます。

      なるほど!
      ボードによって反転する回路になっている場合もあるんですね。

      この場合は、ILI9341 のデータシートにあるコマンド Inversion On (0x21) を実行すれば良いと思います。
      早速、それ用の新しい関数を追加しました。
      dispInversionOn および dispInversionOff という関数です。
      以下のリンクで、beta ver 1.0.51 をダウンロードして、再インストールしてください。
      https://github.com/mgo-tec/ESP32_mgo_tec
      ※古いライブラリはフォルダごと削除してから再インストールしてください。

      その後、対象のスケッチの 67行目と68行目の間、LCD.dispRotation 関数の後に、

      LCD.dispInversionOn();
      

      と入力して、コンパイル書き込み実行させてみてください。

  4. mgo-tec 様

    HiLetgo 2.8″ ILI9341 LCD のSDカードスロットの接続で試行錯誤しています。
    今までサインスマートの LCD は使用していませんでしたが、原因究明のため新たに購入し試してみたところ、テキスト通りの動作を確認できました。
    改めてプルアップの追加をいろいろと試してみましたがうまくいきません。
    Amazon レビューに、「SD MISO だけ 1kΩの抵抗を入れたら正常に読み込めるようになった」とのことで、試してみましたがダメでした。
    他に何か試せるようなことがありましたら、ご教示の程お願いいたします。

    1. juchang さん

      いつもコメントありがとうございます。

      私はその LCD モジュールは持っていないので、良く分かりませんが、Amazon の簡易回路を見てみると、レビューにあるように、SD_MISO にだけ何故かプルアップ抵抗がありませんね。
      それに 1kΩ のプルアップ抵抗を入れれば良いような気がします。
      ただ、1kΩ というのは小さすぎるような気もしますが、良く分かりません。

      その他の方法として、クロック周波数を下げてみてはいかがでしょうか?
      スケッチの 63行目の
      SFR.init( cs_sd, 40000000 );
      を 20000000 とか、それ以下に下げてみて動くかですかね?

      今のところ、それくらいしかアドバイスできませんが、私ももうちょっと調べてみて、分かったらまたお知らせします。

      1. mgo-tec 様

        接続成功!!
        クロック周波数を 10000000 まで下げてみたところ動作確認できました。
        これから、ブレッドボードを3枚つなげて、LCD、ESP32-Devkit、押し釦を搭載したユニットが完成できそうです。
        いつも的確なアドバイスをいただきありがとうございます。

        1. juchang さん

          動作してよかったですね(^^)

          ただ、10MHz まで下げなければいけないとなると、SDカードの SPI クロックが鈍ってしまっている気がします。
          恐らく、ESP32 DevKitC からSDカードスロット端子までの配線が長すぎると、信号が鈍って、高速の SPI 信号が読み取れないことが起こります。
          極力短い配線にしてみてください。
          HiLetgo のボードのSD カードスロットはプルアップ抵抗だけの単純な構成なので、本来ならば SPI モードの標準最高周波数 約 21 MHz くらいは問題無く動作すると思われます。

          1. mgo-tec 様

            HiLetgo のボードを180度回して接続してみました。
            最初つながった 10MHz からスタートして 1MHz づつ上げていったところ、19 MHz までつながることが確認できました。
            この状態で使用して問題ありませんでしょうか。
            又、さらに周波数を上げる方策はありますでしょうか。
            アドバイスをいただけると幸いです。

          2. juchang さん

            いつもありがとうございます。

            恐らく、SDカード側を ESP32-DevKitC に近づけても、SCK や MOSI が LCD と共通線なので、LCD側が逆に長くなってしまっていると思われます。
            するとあまり意味ありません。
            要するに、SCK や MOSI線もトータル距離が短くならないと、インピーダンスが下がらないのです。
            高周波になると、その線の長さがインピーダンス増加に直結しますので、LCD側とSDカード側の SCK と MOSI 線も短くする必要があります。
            そもそも、HiLetgo のこの基板自体が、SDカードまでの回路が長すぎるので、その分、ジャンパーワイヤーも短くしないと辛いと思います。
            大きくなるとなかなか難しいですね。

            また、HiLetgo は 2.8インチですので、その分、LEDバックライトに多くの電流を使うと思われます。
            私の記事の回路図では、GPIO から定電流ダイオードで電流制限していますが、Amazon の回路図を見ると、電流制限抵抗3.9Ω(kΩ?)が入っているので、ESP32-DevKitC の 3.3V から直に LED 端子に入れた方が良いかもしれません。
            そして、LEDバックライトの大きさから、このボード全体的に、M5Stack よりも瞬間的に大電流が流れていることが想像されます。
            ということは、それの電圧降下で、SDカードの電圧が足りなくなっている可能性があります。
            ESP32-DevKitC の 3.3V からの供給では、電源容量が足りていない可能性もあります。
            ですから、3.3V からのジャンパーワイヤーも太く短く、そして、LCD に接続してある GND 線も太く短い配線にしてみてください。

            それと、ブレッドボードの接触不良や、ハンダ付けしたピンソケットの接触不良も SDカードの読み取りを悪くします。
            私の場合は、格安ブレッドボードやロープロファイルピンソケットを使った工作をしたことがありますが、接触不良が多く、殆ど読み取ってくれませんでした。
            でも、この記事でも紹介している、サンハヤトのブレッドボード SAD-101 に替えたら、接触不良は殆ど無くなりました。
            いずれにしても、ブレッドボードはそういう問題が付き物ですので、高周波動作には限界があります。

            また、私のプログラムでは、40MHz としていますが、実際の所、20MHz でも殆ど変わらないので、SPIモードの標準最高周波数付近の 20MHz で動作すれば良いと思います。
            40MHz はハッキリ言って保証外とも言えますが、それで動いているのでそのままにしていました。
            M5Stack の純正ライブラリも昔は 40MHz にしていたのを見受けられましたが、今は 20MHz にしていたと思います。

            ということで、20MHz で動作すればそれで問題ないと思います。
            これで試してみて下さい。

          3. 追伸;
            それと、もう一つ。
            私が動作確認している、Amazon の micro SDHC カード
            Transcend 32GB
            ですが、これだと SPI モードは 20MHz が限界かも知れません。
            もっと最新のハイスピードで高信頼性のもの、例えば、Sandisk とか TOSHIBA のものだと、読み取れる場合があります。
            ここでは動作保証し兼ねるので紹介しませんが、同じ micro SDHC でもいろいろ class がありますので、注意して購入する必要があります。
            このブログで紹介しているものは格安なので、20MHz が限界かも知れません。

  5. mgo-tec 様

    続報;
    ESP32-DevKitC を LCD の中心付近に配置し、最短となるよう硬いジャンパーワイヤーでブレッドボード上を這わせるように配線し直してみました。
    結果、見事に周波数 40MHz を達成することができました。
    ジャンパーワイヤを太く短くすることがこれほどの効果を上げるとは驚きです。
    大きい画面で試せることでこれからの新作発表が益々楽しみです。
    いろいろとご指導いただきありがとうございました。

    1. juchang さん

      それはそれは良かったです (^^)

      やっぱりジャンパーワイヤーでしたか。
      Amazon の写真を見ても、SDカード端子から SDカードスロットまでの距離が無駄に長すぎますよね。
      こんなに大きな基板スペースがあるのだから、最短回路に設計すれば良いのにと思っていました。
      これは疑問ですね。

      それと、勘違いしていたのですが、Amazon の写真および回路図で見えるチップ抵抗 1kΩ は直列に接続されているので、プルアップ抵抗ではなく、その線の保護抵抗のようです。
      プルアップ抵抗は明記されていませんでした。
      ということは、MISO だけに 1kΩ のプルアップする意味がありません。
      プルアップ抵抗が有るか無いかの推測は、VCC 端子と SCK や MOSI, MISO などの端子の抵抗値をテスターで測れば分かると思います。
      もっとちゃんとした回路図が欲しいですね。

      ということで、juchangさんのこの情報で、このコメントを見た他の HiLetgo ユーザーに大いに助けとなると思います。
      こちらこそ情報ありがとうございました。
      今後とも何卒よろしくお願いいたします。
      m(_ _)m

      1. juchangさん

        3Dプリンターとブレッドボードを合わせた素晴らしい工作写真を投稿して下さり、ありがとうございました。
        juchangさんからご了承いただきましたので、ここで紹介させていただきます。
        ブレッドボードを使って、2.8インチ ILI9341 (SDカードスロット付き)モジュールと ESP32 とのSPI通信距離を出来るだけ短くして、SDカードの40MHz設定通信を実現したアイデアはスバラシイです。

        jcg_m5stack_cm1.jpg

        【juchangさんからのコメント】
        3Dプリンター:idbox
        3Dソフト  :Fusion 360
        因みに、このボードは yunrichlcd 3.2” ILI9341 と共用できるようにしてあります。
        3.2“ の大画面は迫力があり皆さんにお勧めです。

         

        中央の隙間を通して、下の段の ESP32 の GPIO に最短で接続されているようです。
        これはなかなか考え付かないですね。
        ここまでくると、ガッツリケースを作って、ハンダ付けして固めた方が良いと思いますが、ブレッドボード上で別の 3.2インチディスプレイに換装できるということで、納得です。
        確かに、3.2インチは迫力ありそうですね!
        とにかくスバラシイ!!!
        みなさん、3.2インチの ILI9341 はおススメだそうですよ!!!

        juchangさんにはいつも工作を試していただき、感謝で言葉もありません。
        ホントにありがとうございます。
        m(_ _)m

  6. mgo-tecさん。素晴らしい作品で尊敬します。
    プログラムをROMさせてもらっています。
    ウオッチバンド仕様にして下記のようにバッテリーを長持ちさせています。
    ・CPUを80Mhzで動作させる。
    ・記事更新を15分間隔にしている。
    ・点灯時LCD.brightness(30)消灯時(0)ボタン操作から30秒自動消灯
    ・消灯時、フラグを見てスクロール処理しない。
    ・ウォッチバンド付属の850mAh→1000mAhを入れている。
    これで、WIFIがOFFかつ画面消灯の時、消費電流43mAになります。
    そこで、質問です。
    CPUを80Mhzにした際、時刻のピンクの数字が多少崩れます。
    処理速度が足りないと言ってしまえばそれまでですが、
    天才的なライブラリを見ても私ごときでは解読できませんでした。
    これって改良の余地はありますでしょうか?
    80Mhzにしている方法は、
    先頭に、#include を追加
    setup()の最終行に、rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M);を追加しています。
    引数は、
    RTC_CPU_FREQ_XTAL
    RTC_CPU_FREQ_80M
    RTC_CPU_FREQ_160M
    RTC_CPU_FREQ_240M
    RTC_CPU_FREQ_2M
    ちなみに、
    RTC_CPU_FREQ_XTALは40Mhzですが、低消費電力なので動けば面白いのですが
    WIFI接続失敗するので、接続時のみ一時的に80Mhzにして接続したりして見ましたが、
    40Mhz時はtimelibが2秒で1秒を刻むため、時計が狂ってしまいました。
    シリアルモニタも半分のbpsになります。
    RTC_CPU_FREQ_2Mはスローモーションスクロールでした。

    1. sakuppiさん

      記事をご覧いただき、ありがとうございました。
      そして、高度な改良で運用して下さっているようで、スゴイですね。
      うれしいかぎりです。

      ただ、CPUクロックを下げて作ったことが無いので、改良できるか分かりません。
      そもそも、デスクトップ用でフルパワー運用しか考えていなかったです。
      私の考えられる省電力は、スクロールの完全停止で、ボタンを押したらスクロールするとかですかね?
      いままで省電力プログラムは殆ど組んだことが無いので、全く分かりません。

      ピンクの数字は、速度が少しでも落ちると崩れてしまいますね。
      数字が動いている間に時刻受信したり、記事を受信したりすると数値が変わる場合があるので、高速処理が原則です。
      例えば、以下の記事
      https://www.mgo-tec.com/blog-entry-google-home-m5stack-realtime-message.html
      では、スクロール時計を使うと崩れてしまったので、固定数字時計にしました。
      いろいろとギリギリで動かしています。

      ということで、全くアドバイスになりませんが、省電力化は私もこれから勉強していきたいと思います。
      来年の課題とさせてください。
      m(_ _)m

  7. あっ。失礼しました。
    includeで付け足すのはsoc/rtc.hのつもりの文章です。
    HTMLでかっこの記号内が無視されるのですね。

    1. あー!
      そういうことですか!

      実はこれは WordPress なので、半角の<>という記号は無視されてしまうんです。
      その場合、HTML の<PRE>タグ内にソースコードを入れてくださればと思います。
      お知らせいただきありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください