Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
IoT初心者向けNefry BTハンズオン / 電車遅延を通知してみよう vol2 #nefry
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
pokiiio
February 07, 2018
Technology
310
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
IoT初心者向けNefry BTハンズオン / 電車遅延を通知してみよう vol2 #nefry
https://dotstudio.connpass.com/event/68187/
pokiiio
February 07, 2018
More Decks by pokiiio
See All by pokiiio
enebularで釣果情報を収集する
pokiiio
0
300
enebular + Sonos + 導電糸で 快適テレワーク環境を作ってみた
pokiiio
0
2.5k
東京の陽性者数ばかりTVに出ててずるくない?
pokiiio
1
180
実践Node-RED活用マニュアルで電子ペーパーネタを書きました!
pokiiio
0
1.7k
テレワークを1ヶ月してみて分かった 3つのこと
pokiiio
0
460
技術書典の進捗を監視する
pokiiio
2
510
SonoSwitch
pokiiio
0
120
SonoSwitch
pokiiio
0
130
冬休みを利用して子供と遊べるゆるメカトロを作ったよ
pokiiio
0
320
Other Decks in Technology
See All in Technology
フィジカルAIの知識ゼロの僕でも AIを使えばここまでできた
tatsuya1970
0
150
AI開発に用いられるHPC技術について
gpuunite_official
0
260
医療の現場を変革に挑戦した半年間の軌跡 - PythonとAIで現場を変える / From Code to Care
soudai
PRO
1
590
【GCC2026】大規模言語モデルを活用した内製検索サービスの社内展開や業務活用
bandainamcostudios
PRO
0
520
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_std_go_uuid
convto
3
650
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
4
26k
35分でわかるEffective Platform Engineering
nwiizo
5
620
Kiro入門|仕様駆動開発で変わるAI時代の開発スタイル
cmkudo
0
340
AI画像認識を活用したゲーム内決済処理検証の自動化
gree_tech
PRO
0
360
小粒でもパワフルなJS Runtime Antjsについて
comamoca
0
120
長期運営で肥大化したExcelマスターデータの解消に向けた移行事例
gree_tech
PRO
0
350
ハッカソンで入賞した話 @ Findy LT
asari194617
0
1.5k
Featured
See All Featured
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Utilizing Notion as your number one productivity tool
mfonobong
4
550
Side Projects
sachag
455
43k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
440
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
380
We Are The Robots
honzajavorek
0
310
Build your cross-platform service in a week with App Engine
jlugia
234
19k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
How to Talk to Developers About Accessibility
jct
2
520
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Transcript
Nefry BTを使って 電車遅延すると光るガジェットを作ろう vol2 ポキオ
Agenda • ポキオとは • Nefry BTとは ◦ 他のボードとの違い ◦ Nefry
BTのよさみ ◦ 例 • Nefry BTを触ってみる ◦ Nefry BTの設定 ◦ プログラムの書き方 ◦ Lチカしてみる ◦ サーバーから情報を取得してみる ◦ 遅延したらLEDを光らせてみる ◦ ダァシエリイェスなガジェットを作ってみる • サマリ • Appendix
自己紹介
ポキオとは • Androidエンジニア • Twitter : @pokiiio • Blog :
Androidのメモとか (http://relativelayout.hatenablog.com/)
ダァシエリイェス…?
None
京急は神 *個人の感想です
KQ-IoT
KQ : Keikyu 京急好きの京急好きによる京急好きのためのIoTガジェット 俺得だっていいじゃないか、にんげんだもの
K: クソみたいな Q: クオリティ 凝ったことはしない、最小工数でやりきる、たまに力尽く クソコードだって、動けばいいよ、にんげんだもの
KQ-IoT
京急ばっかり 京急関係の記事を書いたり… https://dotstud.io/blog/pokio-esp-keikyu-chien/ ダァ シェリイェスな会を開催したり… https://dotstudio.connpass.com/event/61189/ 京急なクソ工作をしたり… http://relativelayout.hatenablog.com/entry/2018/01/16/195616
Nefry BTとは
Nefry BTとは https://dotstud.io/docs/nefrybt/
Nefry BTとは • Arduino互換 • Wi-Fi/BLEが使える • RGBのLEDも実装済み • Groveが使えて配線がいらない
• ディスプレイ付きでデバッグしやすい • 設定も、プログラムのアップデートもブラウザでできる • インターネットへの接続までが簡単 • わみ氏が開発している日本のボード • 便利なAPIも準備されている • ・・・などなど、よさみが深い
Nefry BTとは • Arduino互換、ESP32搭載 ◦ 大手マイコンの統合開発環境が使える ◦ 情報量多いし、サンプルコードも沢山 ◦ コピペでプログラミングも可能
ググればイケる
Nefry BTとは • Wi-Fi/BLEが使える • RGBのLEDも実装済み、ディスプレイ付 • Groveが使えて配線がいらない ◦ 兎に角、最初からフル装備
◦ 買ってすぐに色んな用途に使える ◦ GPIOも有るので拡張性も十分 ◦ もちろん技適通ってるモジュールを使用 ESP32 (Wi-Fi + BLE) ディスプレイ 端子 RGB LED Grove コネクタ GPIO ハードウェアが苦手でもOK オールインワンで拡張性も◎
Nefry BTとは • インターネットへの接続までが簡単 • 便利なAPIも準備されている ◦ 後ほど説明 ソフトウェアが苦手でもOK 通常のプログラミングより容易
便利なライブラリも 入ってる! Wi-Fi接続のための プログラミング不要
Nefry BTとは • わみ氏が開発している日本のボード ◦ サポート体制がすごい ◦ FB上でNefryユーザグループもあります ◦ https://www.facebook.com/groups/nefry/
◦ いろいろできるよ! ◦ https://liginc.co.jp/author/wamisnet 数日後・・・ 日本語でおk IoTしてみたい人にはピッタリ
例
このまえGroveのブザーを買った • これでJR発車メロディーを鳴らしたい・・・ ◦ どうやって鳴らせば・・・
ググればすぐに分かる! • 「Nefry BT メロディ」で検索すると・・・ ◦ 情報がたくさん! ◦ Nefry BTはESP32というチップを搭載しているので、
ESP32のテクニックも使える https://www.1ft-seabass.jp/memo/2017/12/24/nefrybt-grove-skeaker-melody/ https://techtutorialsx.com/2017/07/01/esp32-arduino-controlling-a-buzzer-with-pwm/
で、作ってみた https://www.instagram.com/p/Be2i13UFKQr/
Nefry BTを触ってみる
Nefry BTに触ってみる ①Wi-Fiの設定 1. Nefry BTにディスプレイを取り付ける 2. Nefry BTに電源を供給する(AC-USBアダプターやPC直挿し) 3.
Nefry BTがAP(アクセスポイント)として動作する
Nefry BTに触ってみる ①Wi-Fiの設定 1. Nefry BTがAP(アクセスポイント)になるので、PCでAPに接続する 2. Nefry BTのディスプレイに表示されてるアドレスに、ブラウザでアクセス 3.
PC上でインターネットに繋がる自宅のAPの設定をする (これでNefry BTがインターネットに繋がるようになる!)
Nefry BTに触ってみる ②Arduino IDEを起動 1. Arduino IDEを立ち上げます!(セットアップしてありますよね?)
Nefry BTに触ってみる ③プログラムの書き方 • プログラムはC言語(っぽい言語) • プログラムを書く場所は主に2つ ◦ setup() ▪
起動時に1度だけ実行される ▪ 主に初期化などの処理を書く ◦ loop() ▪ setup()の後に呼ばれる ▪ loop()内の処理が終わると 再度loop()が呼ばれる ▪ メインのロジックを書くことが多い
Nefry BTに触ってみる ④Lチカしてみる • LEDを好きな色で光らせてみよう! ◦ 光る→消える→光る→消える→・・・ をプログラミングしてみる • せっかくなので便利な関数を使ってみる!
◦ Nefry.println() ◦ Nefry.setLed() ◦ Nefry.ndelay() • これらの関数を使うにはNefry.hをincludeする必要がある ◦ #include <Nefry.h>
Nefry BTに触ってみる ④Lチカしてみる • Nefry.println() ◦ シリアルモニタに文字列を出力 (例:Nefry.println(“テスト”); ) ◦
プログラムの進捗を出力したり、デバッグに便利 ◦ 通常は setup() 内で、Serial.begin(115200); などと記述する必要があるが、不要! • Nefry.setLed() ◦ Nefry BT上のLEDを好きな色で光らせる(例: Nefry.setLed(255,0,0); ) ◦ 通常、Adafruit NeoPixelsライブラリをインストールして、 初期化のコードを書いて・・・が一切不要! • Nefry.ndelay() ◦ 指定した時間(msec)だけ処理を止めます(例: Nefry.ndelay(1000);) ◦ マルチタスク対応で、別スレッドで動いている処理は止まらない
Nefry BTに触ってみる ④Lチカしてみる いざプログラミング(配布したプログラムを参考にしてください) • コードの冒頭に #include <Nefry.h> を記載 •
setup() は空っぽのまま • loop() に次の処理を記載 ◦ Nefry.setLed() で好きな色に光らせる ◦ Nefry.println() で "LED ON" をシリアルモニタに表示させる ◦ Nefry.ndelay() で1秒待つ ◦ Nefry.setLed() でLEDを消す (ヒント:RGBを 0,0,0 に設定する) ◦ Nefry.println() で "LED OFF" をシリアルモニタに表示させる ◦ Nefry.ndelay() で1秒待つ プログラムを書き込むには ① [ツール] > [ボード] で Nefry BTを指定する ② [スケッチ] > [マイコンボー ドに書き込む] を実行
TIPS① • Nefry BTがMac/PC上で見つからない、スケッチを書き込めない ◦ FTDIのドライバーを入れ直すと見つかるかも ◦ http://relativelayout.hatenablog.com/entry/2017/09/01/223718 ◦ http://www.ftdichip.com/Drivers/VCP.htm
TIPS② • それでもNefry BTがMac/PC上で見つからない、スケッチを書き込めない ◦ Arduino IDEからコンパイル済みのバイナリファイルを書き出す ◦ Nefry BTの設定ページからバイナリファイルをアップロードして書き込む
◦ Nefry BTがMac/PCにつながってない環境下でもスケッチの書き込みが可能! [Sketch] > [Export compiled Binary] で コンパイル済みのバイナリファイルを出力 [Upload Sketch] からバイナリファイルを 選択してアップロードすると書き込まれる
TIPS③ • Nefry.println()で出力したログはNefry BT設定ページ上でも見られます! ◦ [Web Console]を開くだけ ◦ Nefry BTがMac/PCにつながってない環境下でもログの確認が可能!
Web Consoleから Nefry BTへ 文字列の 送信も可能
Nefry BTに触ってみる ④Lチカしてみる
ここで一旦休憩
Nefry BTに触ってみる ⑤サーバーの情報を取得 • 遅延してるかどうかの情報は 鉄道遅延情報のjson (http://rti-giken.jp/fhc/api/train_tetsudo/delay.json) から取得します ◦ 遅延している路線の情報を
JSON 形式で取得できる ◦ Nefry BT で上記URLにアクセスして情報を取得してみる • HTTP-GETには HTTPClient を用いる • Nefry BTならではのよさみ ◦ 通常はWi-Fi接続のシーケンスをプログラミングする必要がある ◦ Wi-Fiの設定はブラウザからできる上、 Wi-Fi接続はNefry BTの起動時に自動で行われる ◦ つまり、プログラミング上では不要!
Nefry BTに触ってみる ⑤サーバーの情報を取得 プログラムを書き込むには ① [ツール] > [ボード] で Nefry
BTを指定する ② [スケッチ] > [マイコンボー ドに書き込む] を実行 response に入ったデータを Nefry.println() を使って シリアルモニタに 表示させてみてください
Nefry BTに触ってみる ⑤サーバーの情報を取得 この一文を追加! シリアルモニタにJSONが表示される この一文も追加すると HTTP-GETエラー理由も表示されます
Nefry BTに触ってみる ⑥遅延したら光らせてみる • JSONデータの取得までできた • JSONに特定の路線が含まれてるかどうかを調べてLEDを光らせたい ◦ 定期的に鉄道遅延情報の JSONを取得
◦ JSONに特定の路線が含まれるかチェック ◦ LEDを光らせる • ポキオのよさみ ◦ クソコードでも動けばいい(笑) ◦ JSONのパースは面倒なので、 JSONに路線名が含まれてるかどうかだけで判断すればいい ◦ ArduinoのStringには contains() がない・・・ → indexOf() で代用(笑) ▪ https://www.arduino.cc/en/Reference/StringIndexOf
Nefry BTに触ってみる ⑥遅延したら光らせてみる プログラムを書き込むには ① [ツール] > [ボード] で Nefry
BTを指定する ② [スケッチ] > [マイコンボー ドに書き込む] を実行 String#indexOf() を使って IF文を完成させて下さい
Nefry BTに触ってみる ⑥遅延したら光らせてみる ちなみに JSON取得のロジックは getTrainDelayJson() として 別関数にまとめています
Nefry BTに触ってみる ⑥遅延したら光らせてみる こんな感じ
ダァシエリイェスしてみる • nefry_handson_4 をつかって、好きな路線名・色にカスタマイズ • Nefry BTを電車の中に両面テープで固定して完了
ダァシエリイェスしてみる プログラムを書き込むには ① [ツール] > [ボード] で Nefry BTを指定する ②
[スケッチ] > [マイコンボー ドに書き込む] を実行 路線名と色を カスタマイズしてください
ダァシエリイェスしてみる 光り方もカスタマイズ してみても良いかも!
サマリ
サマリ • IoTするなら、まずNefry BT♪ ◦ 色々実装済み・Grove対応で、ハードウェアが楽 ◦ Arduino互換で情報量豊富、さらに便利関数が揃っていて、ソフトウェアもイケる • 参照
◦ Nefry https://nefry.studio/ ◦ Nefry https://program.nefry.studio/ ◦ Arduino Reference https://www.arduino.cc/en/Reference/HomePage ◦ Qiita http://qiita.com/tags/nefry
Thank you!
Appendix
HTTPSなサイトの場合は別途対応が必要 • 今回使った「rti-giken.jp/...」はHTTPでアクセスしている ◦ HTTPSなサイトの情報を取得する場合は実装を変える必要がある • 対応方法①:WifiClientSecureを使ってアクセスする ◦ Pros:実装例が多い ◦
Cons:HTTPのリクエストメッセージをコード上で書く必要がある • 対応方法②:HTTPClientに引数を追加してアクセスする ◦ Pros:実装自体は楽 ◦ Cons:アクセスに必要な認証局証明書を生成して、コードに組み込む必要がある 例: WiFiClientSecure client; // 変数を宣言 (中略) client.print(String("GET /fhc/api/train_tetsudo/delay.json HTTP/1.1\r\n") + "Host: rti-giken.jp\r\n" + "Connection: close\r\n\r\n"); // HTTP-GETのリクエストメッセージを書く
リダイレクトは発生するサーバーへ HTTP-GETするときはHTTPSRedirectを使う • http://relativelayout.hatenablog.com/entry/2017/06/24/230505 • GAS(Google Apps Script)のAPIでハマった • HTTPSな上に、リダイレクトが発生する
• リダイレクトが発生しても、その先で再度GETしたい • 下記のライブラリが便利 ◦ https://github.com/electronicsguy/ESP8266/tree/master/HTTPSRedi rect
A fatal error occurred: Failed to connect to ESP32: Timed
out waiting for packet header • http://relativelayout.hatenablog.com/entry/2017/09/01/223718 • MacでFTDIのドライバが正しく動作してなかった • 公式ドライバ(http://www.ftdichip.com/Drivers/VCP.htm)をインストールした あと、カーネルエクステンションを有効にする必要がある
LEDを追加したい • マイコン内蔵のRGB LEDやそのLEDのテープを準備 • Nefry BTで準備されている関数が使えるので便利 • 去年のアドベントカレンダーネタで作ったライブラリも是非! ◦
「ダァ シエリイェスなクリスマス」 https://qiita.com/pokiiio/items/29e85033214c5d14e204
Nefry BTではBLEが使える • BLE(Bluetooth Low Energy)という通信方式が利用可能 • Wi−Fiと異なり、低消費電力で通信が可能 ◦ Nefry
BT(ESP32)からBLEでNode.jsにデータを送ってみよう ◦ https://dotstud.io/blog/nefrybt-ble-bluetooth-peripheral/
IFTTTとの連携は超簡単 • IFTTTとはWebサービスの1つ • 他のサービスと他のサービスを結びつけたりできる • NefryではIFTTTのTriggerも関数として用意されている ◦ Nefry BTとIFTTTでスイッチを押したら
LINEを送る仕組みを作ってみよう ◦ https://dotstud.io/blog/nefry-ifttt-push-line/ ◦ Nefry BTとIFTTTライブラリをつかってお腹が痛くなった時に押すボタンを作る ◦ http://relativelayout.hatenablog.com/entry/2017/10/02/235930
センサーの値をグラフ化するのも簡単 • Nefryの関数にはグラフ化を簡単にやってくれるサービス「Ambient」に対応した 物がある ◦ Nefryで取得したセンサーデータを Ambientで簡単にグラフ化しよう! ◦ https://dotstud.io/blog/nefry-data-show-graphically/ ◦
NefryBT向けAmbientライブラリ紹介 ◦ https://qiita.com/wamisnet/items/3d7ff1f056f159a2475c