Twitter API から Arduino – ESP32 を使ってトレンドツイートを取得してみた

記事公開日:2017年12月6日
最終修正日:2018年3月20日
なんと、この記事が工学社さんの
自作派のためのコンピュータ技術情報誌、
I/O(アイオー)

2018年3月号、4月号
に転載していただけることになりました。
前編と後編に分けての掲載です。
私の様なアマチュアのブログ記事が技術情報雑誌の記事にしていただけることは、この上ない光栄で、嬉しい限りです。
工学社の皆さま、ありがとうございました!
m(_ _)m
他にも、自作派にとってとても興味深い記事がたくさんありますので、是非読んでみて下さい。
Twit_Kougakusya_IO_01
Twit_Kougakusya_IO_02
twit_IO4_01
twit_IO4_02

更に、Make:Japan さんにもこの記事が紹介されました。
(2017.12.22)
恐縮です。光栄です!!
ありがとうございました!!
m(_ _)m

こんばんは。

今回は、ちょっとスゴイですよ。
Arduino core for ESP32 を使って、Twitter API を使うことができたので紹介したいと思います。

これを使えば、今現在のトレンド キーワードを取得できるので、災害や緊急時のツイートビッグデータを取得することも可能です。
これは、自分としては念願のプロジェクトでもあったのです。

なぜかというと、インターネット上ではマイコンから自分の呟きをツイートする情報は沢山あり、IFTTT などを使えば比較的簡単にツイート投稿をすることができますが、逆に投稿されたツイートをマイコンで取得する情報があまりありません。
あったとしても、ラズパイを使用した方法です。
ESP8266 では Tweetを取得するライブラリがあったりしますが、ESP32 にはまだありません。

ツイッターのトレンドデータというものはとっても有効なデータだと思います。
今、日本で何が起こっているか、または世界で何が起こっているかを瞬時に把握することができます。
これをパソコンやスマホを開かずに常時画面に表示することができれば、とても便利だろうなぁ、と思っていました。

ところで、以前、ESP8266 ( ESP-WROOM-02 ) を使って、ツイートを取得する記事を書いたことがあります。
Twitter 検索結果のツイートを有機EL ( OLED )に表示させてみた

この記事では、TwitterAPI を使わずに、Web上の記事を解析してツイートを取得していましたが、膨大な文字処理にマイコンの CPU が使われてしまって、メモリを多量に消費してしまいます。
Twitter API が使うことができれば、必要な情報をピンポイントで取得できるので是非とも使いたかったのです。
でも、いろいろ実験をしていましたが、マイコンとの OAuth 認証が必要で、その方法が今までまったく分からなかったのです。

でも、今回、やっとやっとこの OAuth 認証を Arduino IDE – ESP32 で実現できたんです!!
しかも、Time ライブラリ以外は、Arduino core for ESP32 内のライブラリのみで実現できて、その他の外部ライブラリは一切使用していません。
外部ライブラリを使用せずに動作させてみると、OAuth 認証のしくみがある程度理解できるようになってきます。
これは、私の様な独学のアマチュアプログラマにとって、とっても大きな成果なんです。
今後の IoT 開発にいろいろと役立ちそうな気がしています。

OAuth 認証については、最初は sha1.c という外部ライブラリを使って実験していました。
しかし、いちいちスケッチにコピーしなければいけなくて面倒だったので、Arduino core for ESP32 のライブラリに組み込まれている mbedtls ライブラリを流用してみたら、なんと、できてしまいました。
そんなわけで、Twitter API が使えるようになったわけです。
これには我ながら感動してしまいましたね。
やったーーー!
って感じです。

これを使えば、Google Home でツイート結果を喋らせることもできます。
既にもう実証済みなので、後々記事にしたいと思います。
アマチュア電子工作家にとって、IoT 機器開発に幅がグーンと広がりますね。

ということで、Arduino core for ESP32 で Twitter API を使用する方法を紹介したいと思いまが、更にもう一つ言っておかなければなりません。

実は、Twitter API から返って来る文字列はなんと、Unicode ( UTF16 )文字列なのです。
これではディスプレイに日本語表示することはできません。

そこで、いろいろ私なりに調べた結果、なんと、Arduino core for ESP32 に入っている、xtensa-esp32 ライブラリを使えば、それほど苦労せずに UTF-8 文字列に変換できたんです。
これも我ながら大きな成果でした。

ということで、前置きが長くなってしまいましたが、Twitter API の使い方を紹介したいと思います。

スポンサーリンク

準備するもの

以下のESP-WROOM-32 ( ESP32 ) 開発ボードがお勧めです。
ESP-WROOM-32 は Arduino IDE で開発ができる、技適取得済みWi-Fi & Bluetooth 搭載のマイコンです。
それをパソコンにUSB接続できるように使いやすくしたボードが以下のものです。

ESPr Developer 32

まずは、USBホスト機器や ESP-WROOM-32 自体を突入電流や過電流から手厚く保護できる、スイッチサイエンス製の ESP-WROOM-32 ( ESP32 )開発ボードをお勧めします。
これの仕様例は以下の記事を参照してみてください。

ESPr Developer 32 ( スイッチサイエンス製 ) を使ってみました

その他、Espressif Systems 社純正の以下のボードもあります。

ESP32-DevKitC

※2018/01/30時点で、Amazon.co.jp では Espressif system純正の ESP32-DevKitC は販売されていません。秋月電子通商さんか、マルツパーツさんで購入してください。

Wi-Fi環境

インターネットにつながっている Wi-Fi ルーター環境が必要です。
事前に ESP-WROOM-32 がネットに接続できるように、Macアドレスフィルタリングなどの設定を済ませておいてください。

特に注意していただきたいのは、IoT機器や その他 Wi-Fi 機器が増えると、Wi-Fiルーター設定の DHCP ユーザー最大数をいつの間にか超えている場合があります。
その場合はなぜか Wi-Fiに繋がらないという症状が出ますので、ユーザー数を増やすなどの設定にしておいてください。

パソコン、USBケーブル等

Arduino core for ESP32 のインストールおよび設定

Arduino IDE は 1.8.5 で動作確認しています。

Arduino core for ESP32 は最新版を使用してください。
そのインストール方法や設定は以下の記事を参照してください。

Arduino core for the ESP32 のインストール方法

Time ライブラリのインストール

Arduino 標準の Timeライブラリを予めインストールしておいてください。
インストール方法は以下の記事を参照して最新版をインストールしておいてください。

https://www.mgo-tec.com/blog-entry-1616shinonome-ws-oled-news.html

Twitter APIs に登録し、Access Token を生成する

まず、ご自分のTwitter アカウントを作って置いて下さい。
Twitter アカウントができていれば、ログインした状態にしておいてください。

次にTwitter Developers のページで登録します。
以下のリンクをクリックしてください。

https://developer.twitter.com/

開くと、こんな感じのページが表示されますので、右上端の「Apply」をクリックしてください。
なお、この登録方法は 2017/12/05 時点ですので、今後変更される可能性があります。

TwitterAPI_01

すると、以下のページが表示されるので、
「 Get started with standard access 」
をクリックしてください。

TwitterAPI_02

すると、下図の様なページになるので、「 apps.twitter.com 」をクリックしてください。

TwitterAPI_03

次の画面になるので、「 Create New App 」をクリック。

TwitterAPI_04

すると、下図の画面になるので、必要事項を入力してください。
必ずアルファベットで入力してください。
特に注意していただきたいのは、「 Callback URL 」欄に入力することです。
ここは必須事項ではないのですが、OAuth 認証ができないという情報がネットで上がっていたので、そこに適当な URL を入力しておきます。
ご自分の Webサイトが無ければ、ツイッターの URL
https://twitter.com

とでも入力しておけば良いと思います。

TwitterAPI_05

そうしたら、そのページの一番下方の同意をチェックして、
「 Create your Twitter application 」をクリックしてください。

TwitterAPI_06

すると、下図の様な画面になるので、
「 Keys and Access Tokens 」をクリックしてください。

TwitterAPI_07

すると、下図の様な画面になります。
Consumer Key ( API Key ) と Consumer Secret ( API Secret )が Twitter APIs を動かすために必要です。
その他に、Access Token が必要なので、このページの一番下方の「 Taken Actions 」をクリックします。

TwitterAPI_08

すると、下図の様に Access Taken (アクセストークン)が生成されます。
※これらのキーは他者に見られないように十分注意してください

TwitterAPI_09

以上、Twitter APIs を使用するには、以下の4つのキーが必要になります。

Consumer Key ( API Key )
Consumer Secret ( API Secret )
Access Token
Access Token Secret

次では、Twitter APIs への HTTP リクエスト方法の流れを説明します。

スポンサーリンク


mgo-tec電子工作 関連コンテンツ ( 広告含む )

投稿者:

mgo-tec

Arduino , ESP32 ( ESP-WROOM-32 ) , ESP8266 ( ESP-WROOM-02 )等を使って、主にスマホと連携した電子工作やプログラミング記事を書いてます。ライブラリも作ったりしてます。趣味、独学でやってますので、動作保証はしません。 電子回路やプログラミングの専門家ではありません。 畑違いの仕事をしていて、介護にドップリ浸かりそうな年配者です。 少しだけ電気の知識が必要な仕事なので、電気工事士や工事担任者等の資格は持っています。

「Twitter API から Arduino – ESP32 を使ってトレンドツイートを取得してみた」への7件のフィードバック

  1. 雑誌掲載おめでとうございます☆
    すごいですね!
    これからもご活躍楽しみにしています。

    1. けんにぃさん

      ご無沙汰しております。
      うれしいコメントありがとうございます。
      m(_ _)m
      記事を寄稿したわけではなく、転載ですが、それでも雑誌になるというのは嬉しいものがありますね。

      ところで、今、ESP32 の SSID セレクターライブラリを作成中です。
      近日中に公開予定です。
      これには、パスワード送信が絡んでいるため、SSL通信が必須です。
      そのため、ESP8266ではメモリが少ない為、動作しない可能性があり、ESP8266用の公開は未定です。
      とりあえず、お知らせでした・・・。

  2. お久しぶりです☆
    転載されるというのは、魅力的な記事だからだと思います☆
    ESP32のライブラリーは興味津々です♪楽しみにしています。まだESP32買ったままで使えてないですが、何か始めたいと思っていますので。
    ESP8266でなんとか粘ってましたが、策尽き果てました(笑)
    希望としてはESP32で大きめドットのディスプレイをSSIDやpasswordをスマホから取得して駆動(一度取得したら繋がらなくならない限りROMから読み出し)し、外部からのコメントも表示(これは元気8266で外部サーバーに書き込みしたファイルの読み出しで出来ています)をしたいと思っています。(ヤフーのニュースは最悪見れなくてもOK)
    元々ヤフーのメッセージを切替していた感じで、ガスの炎監視やコンセントの電流センサーで消し忘れ監視をディスプレイで表示(これも8266ではある程度可能)を考えてます。
    なので、記事を参考にさせてもらいながら色々やってみたいと思いますので楽しみにしています♪

    1. なるほど。
      けんにぃさんのやろうとしていることは、これからの高齢化社会に必須のアイテムになりそうですね。
      スバラシイです。
      そうなると、益々セキュリティの高い通信が重要になってきますね。

      ESP-WROOM-02(ESP8266) は何故かフラッシュが2MB版が販売されていて、凝ったものを作ろうとすると明らかにメモリが足りないですね。
      外付けSRAM や SDカードを追加すればある程度のことはできますが、それならばESP-WROOM-32を使った方が圧倒的に安上がりで、幅広いプログラミングができますね。
      これからは ESP32 を中心に工作していった方が良いと思います。

      ということで、今年度末で多忙ですので、SSIDセレクターはもうちょいお待ちください。

  3. ありがとうございます☆
    ついに完成したのですね♪
    是非とも参考にさせてもらいESP32使ってみたいと思います☆
    自分は、ESP8266でスマートコンフィグではとりあえず使えるようになりましたので、これを32でやっていけるように頑張ります♪

    1. OpenSSL で証明書発行が最初の壁ですが、1回作ることが出来れば、あとは簡単です。
      素人コードなので無駄が多いと思いますが、機会があったら使ってみてくださいませ。
      m(_ _)m

コメントを残す

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

*画像の文字を入力してください。(スパム防止の為)

This site uses Akismet to reduce spam. Learn how your comment data is processed.