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
pokiiio
February 07, 2018
Technology
300
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
290
enebular + Sonos + 導電糸で 快適テレワーク環境を作ってみた
pokiiio
0
2.4k
東京の陽性者数ばかりTVに出ててずるくない?
pokiiio
1
180
実践Node-RED活用マニュアルで電子ペーパーネタを書きました!
pokiiio
0
1.7k
テレワークを1ヶ月してみて分かった 3つのこと
pokiiio
0
460
技術書典の進捗を監視する
pokiiio
2
500
SonoSwitch
pokiiio
0
110
SonoSwitch
pokiiio
0
120
冬休みを利用して子供と遊べるゆるメカトロを作ったよ
pokiiio
0
310
Other Decks in Technology
See All in Technology
人材育成分科会.pdf
_awache
4
290
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
170
Kiroで書いた 設計書 が AI レビューの 採点基準 になる
ezaki
0
130
ザ・データベース、MySQL ~ OSC 2026 Sendai ~
sakaik
0
120
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
160
AIはどのように 組織のアジリティを変えるのか?
junki
4
1k
RAG を使わないという選択肢
tatsutaka
1
260
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
1
130
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
150
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
2
500
2026TECHFRESH畢業分享會 - Lightning Talk - 打造精準高效的 MCP 設計模式與測試實務
line_developers_tw
PRO
0
1.2k
攻撃者視点で考えるDetection Engineering
cryptopeg
3
2k
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Docker and Python
trallard
47
3.9k
Abbi's Birthday
coloredviolet
2
8.1k
Evolving SEO for Evolving Search Engines
ryanjones
0
220
Ruling the World: When Life Gets Gamed
codingconduct
0
250
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
850
Skip the Path - Find Your Career Trail
mkilby
1
150
How STYLIGHT went responsive
nonsquared
100
6.2k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Code Review Best Practice
trishagee
74
20k
New Earth Scene 8
popppiees
3
2.3k
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