Slide 1

Slide 1 text

中村 真理 ESP32で始めよう IoT開発ハンズオン

Slide 2

Slide 2 text

中村 真理 Nakamura Shinri 診療放射線技師 Line API Expert 株式会社B&B Lab. 共同ファウンダー 自己紹介 株式会社 B&B Lab. 事業内容:IoTハードウェア及びサービスの開発

Slide 3

Slide 3 text

Nakamura Shinri http://b-and-b-lab.jp 手動ON 自動 ■開発実績 SORACOM Air を活用した自動潅水システムの開発 〇農業ハウス向け自動潅水システム(開発中)

Slide 4

Slide 4 text

爆発的な普及のために 今日の流れ IoTとは何か 使用する機材 今日作成するものの概要 開発環境 通信方法 実際の開発 通信確認 ※用意したqiitaのページと一緒に使用してください https://qiita.com/shinfrom/items/2f350d789a89b7086df3

Slide 5

Slide 5 text

爆発的な普及のために IoTとは IoTとはどのようなものでしょう? IoTと聞いてどのようなものを思い浮かべますか?

Slide 6

Slide 6 text

爆発的な普及のために IoTとは IoTとは? Internet of things モノが直接インターネットに接続

Slide 7

Slide 7 text

爆発的な普及のために IoTを実現する技術背景① スマートホンが普及 センサーが安価に!

Slide 8

Slide 8 text

爆発的な普及のために IoTを実現する技術背景② コンピュータリソースやスケーラビ リティの課題はクラウドの普及に よって解消 クラウドの普及

Slide 9

Slide 9 text

爆発的な普及のために 技術要素は出そろってきた 技術要素はある程度出そろってきた 次の課題 どのような課題に対して、どのような効果を出すことができ るかを考えるほうが重要になってきた つまり 繋いでみて、データが取れただけではダメ!

Slide 10

Slide 10 text

爆発的な普及のために IoTの価値とは イノベーティブな価値を起こすことを目指すのが本質 モノをつなげるだけでなく モノをつなげることだけでなく、モノをつなぐこ とによって得られるデータをもっと利用できる仕 組みや分析方法を構築する必要がある

Slide 11

Slide 11 text

爆発的な普及のために 一般的なIoTのイメージ サーバー モノ(デバイス) センサー ネットワーク クラウド ネットワーク アプリケーション https://www.rohm.co.jp/blog/-/blog/id/7405417

Slide 12

Slide 12 text

爆発的な普及のために IoTの通信方法 https://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h29/html/nc133200.html 広域・遠距離 低速 低コスト 省電力 狭域・短距離 高速 高コスト 消費電力大 Wi-Fi LTE LPWA BLE RFID NFC ZigBee 5G

Slide 13

Slide 13 text

爆発的な普及のために 今回作成するもの デバイス側 サーバー側

Slide 14

Slide 14 text

爆発的な普及のために 今回の開発で使用するもの ・マイコン ・プログラム開発環境 ・センサー ・ブレッドボードとジャンパワイヤ

Slide 15

Slide 15 text

爆発的な普及のために マイコンとは 組み込みエンジニアの教科書 より引用 一つのICチップにコンピュータが持つ基 本機能一式を搭載した電子部品のこと マイクロコントローラの略称 CPU:演算を行う メモリ:記憶領域 ペリフェラル:入出力を行う

Slide 16

Slide 16 text

爆発的な普及のために よく使用されるマイコン Arduino Uno ESP32 マイクロビット M5stack

Slide 17

Slide 17 text

ESP32 ・Wi-Fi ・Bluetooth ・SPI ・I2C ・UART ・PWM ・GPIO ・電源電圧:2.2V~3.6V 今回使用するマイコン

Slide 18

Slide 18 text

爆発的な普及のために センサーについて アナログセンサー 測定したデータを電気信号に変換したときに、それを電圧の連続 データ(アナログデータ)で出力する。 ディジタルセンサー 測定したデータを電気信号に変換したときに、それを0と1のディ ジタルデータで出力する

Slide 19

Slide 19 text

爆発的な普及のために センサーの種類 温湿度センサ 超音波センサ CO2センサ 人感センサ 様々な種類のセンサーがある

Slide 20

Slide 20 text

爆発的な普及のために 今回使用するセンサー 土壌水分センサー CdS感光センサー

Slide 21

Slide 21 text

爆発的な普及のために ブレッドボードとジャンパワイヤ ブレッドボード プロトタイプを作成するための基板 ブレッドボードの穴に部品を抜き差しすることではんだ付け不要 で回路を構成できる ジャンパワイヤ ブレッドボードで使用できる線材 両端がブレッドボードにさせるようになっているものや、マイコ ンやセンサが挿せるように穴が開いているものがある

Slide 22

Slide 22 text

爆発的な普及のために ブレッドボード 外側は横方向に、内側は縦方向に配線されている

Slide 23

Slide 23 text

爆発的な普及のために プログラム開発環境① Arduino IDE クロス開発環境 スケッチでプログラム 対応しているマイコンが多い Cライクにプログラミング 開発に必要なものがそろっている

Slide 24

Slide 24 text

爆発的な普及のために プログラム開発環境② ビジュアルプログラミングツール Node-RED 処理をノードでブラックボックスにする ネットワークはデータの流れを示す 難しいことを考えずに 使用できる

Slide 25

Slide 25 text

爆発的な普及のために ハンズオンに入ります 実際に手を動かします

Slide 26

Slide 26 text

爆発的な普及のために 開発環境の構築 ※詳しい手順はこちらにまとめています ・Arduino IDEをインストールする ・ESP32のボード情報をArduino IDEに登録する esp32ボードマネージャ https://github.com/espressif/arduino-esp32

Slide 27

Slide 27 text

爆発的な普及のために LEDについて + LEDとは https://www.slideshare.net/chabudaigaeshi/02-hands-onpptx 発光ダイオードと呼ばれ順方向に電圧を加えると光る半導体素子 カソード:外部回路へ電流が流れだす電極(ー) アノード:外部回路から電流が流れ込む電極(+) -

Slide 28

Slide 28 text

爆発的な普及のために Lチカについて 何も考えずに光らせてみましょう LEDのアノード側をGPIOの12番に接続 します LEDのカソード側に抵抗、GNDと接続 します

Slide 29

Slide 29 text

爆発的な普及のために Lチカのビルドと書き込み 一度だけ実行される関数 ☑ボタンを押してコンパイルを行う →ボタンを押してビルドと書き込みを行う 繰り返し実行される関数 LED点灯 LED消灯 ソースコードの場所

Slide 30

Slide 30 text

爆発的な普及のために センサーを動かす アナログセンサーの読み込み analogRead()関数で読み込みを行う 引数で使用するピン番号を指定します 使用できるピンはADCと接続されているピンのみ

Slide 31

Slide 31 text

爆発的な普及のために CdS感光センサーの仕組み 動作原理 硫化カドミウムを使用した光センサーで、光の強さに応じて電気 抵抗が低下する。 人の目の特性に近いので明るさセンサーに 向いている

Slide 32

Slide 32 text

爆発的な普及のために CdS感光センサーの配線 CdSセンサーの配線例です ※実際に使用するマイコンモジュールとは違いますが この例を参考に配線してください センサーと接続するピン番号は32番になります

Slide 33

Slide 33 text

爆発的な普及のために CdS感光センサーを動かしてみる まずは値を読み取ってみます void setup() { Serial.begin(115200); Serial.println("start"); pinMode(CDS_PIN, INPUT); } void loop() { int Measurevalue; Measurevalue = analogRead(CDS_PIN); Serial.print("Mesure value is : "); Serial.println(Measurevalue); delay(500); } GPIOのモードの変更 値の読み出し

Slide 34

Slide 34 text

爆発的な普及のために 感光センサーでLEDを操作する 明るい 暗い 閾値(スレッショルド) th_light 閾値よりも暗いときはLEDを光らせる if (Measurevalue < th_light ){ //LEDを点灯させる } else { //LEDを消灯させる } スレッショルドを変化させてみてください

Slide 35

Slide 35 text

爆発的な普及のために 水分センサーの仕組み https://wiki.dfrobot.com/Capacitive_Soil_Moisture_Sensor_SKU_SEN0193 動作原理 静電容量方式で土壌水分レベルを測定する 水分量が上がると出力値が下がり 水分量が下がると出力値が上がる 定量的な測定はできない

Slide 36

Slide 36 text

爆発的な普及のために 水分センサーを動かしてみる プログラムは光センサーとほぼ同じです ピン番号を35番にして 自分で作成してみてください 配線 VCCを3.3V GNDをGND 信号線をD35に接続します

Slide 37

Slide 37 text

爆発的な普及のために Wi-Fiを利用した通信 MQTT CoAP HTTP 今回使用するので細かく説明します 1対1の通信用のプロトコル IoT用の簡易版HTTPともいえる リアルタイムなセンサーデータの送受信に向いています 機器同士の通信に向いています HTML文書や画像、音声、動画等のコンテンツの送受信に 用いられるプロトコル

Slide 38

Slide 38 text

爆発的な普及のために MQTTについて MQTT 二者間の非同期通信をサポートするプロトコル。 メッセージの送信側と受信側を空間という点でも時間という点でも切 り離すことができる。 双方向通信ができるのにヘッダーが小さいのが特徴

Slide 39

Slide 39 text

爆発的な普及のために MQTTライブラリのインストール pubsubクライアントライブラリのインストール https://pubsubclient.knolleary.net/

Slide 40

Slide 40 text

爆発的な普及のために ファームウェアをマージさせる start ①set up サーバーとの接続確認 データの作成 ②mqtt送信 このような流れで実装します ソースコードと比較して、どのコード がどの処理なのか考えてみましょう。 ソースコードはこちらです

Slide 41

Slide 41 text

爆発的な普及のために JSONとは Javascriptのオブジェクトを文字列で表すデータフォーマット 異なるプログラミング言語間のデータの受け渡しが楽になる Webアプリでは、サーバーとwebクライアント間でのデータの受け渡 しにJSONがよく用いられる {“key” : value, “key2” : value} ダブルクォーテーションには、オブジェクトのプロパティ名が入る

Slide 42

Slide 42 text

爆発的な普及のために Payloadの中身 {"DeviceID":"01",”moist”:%d,”light”:%d} “ ”はプロパティ名 %dは整数(int)を表す 送受信されるデータの伝送単位(パケット等)のうち、宛先など の制御情報を除いた相手に送り届けようとしている正味のデータ 本体のこと。 payloadとは

Slide 43

Slide 43 text

爆発的な普及のために Payloadの作成の準備 sprintf 書式にのっとって変換した出力を文字列に格納 する関数 int 整数を扱うデータ型 char 文字型を扱うデータ型 変数の集まり 配列

Slide 44

Slide 44 text

爆発的な普及のために Payloadの作成 int light; int moist; char payload[120]; sprintf(payload, "{"light":%d,"moist":%d}", light, moist); payloadの作成例です lightの値とmoistの値をpayloadに詰めています

Slide 45

Slide 45 text

爆発的な普及のために 実用的なpayload なるべくデータを詰め込む データを16進数に変換することでなるべくデータを詰め込む (例) 明るさ16、湿度8、温度24 整数のデータ(4 Byte) 000F00080018 16 8 24

Slide 46

Slide 46 text

爆発的な普及のために enebularについて eneubularは、株式会社ウフルが提供するIoT製品・service作りを包 括的に支援するサービスです https://www.enebular.com/ja/ 一定時間無料で試用することができます アカウント登録は必要ですが

Slide 47

Slide 47 text

爆発的な普及のために Enebularの登録とフローの開き方 Emailを登録する パスワードを登録する ユーザー名を決めて

Slide 48

Slide 48 text

爆発的な普及のために enebularのフローの開き方 プロジェクトの作成をする 新規作成して名前を付ける

Slide 49

Slide 49 text

爆発的な普及のために Node-REDのフローの作成 使いたいノードをドラッグして配置する デプロイする

Slide 50

Slide 50 text

爆発的な普及のために データの送信と受信確認 サーバーのIPアドレスを入力します トピックを入力して deployすると受信準備が整いました

Slide 51

Slide 51 text

爆発的な普及のために データの分割 受信データの取り出し functionノードを利用してデータを取りだします var light = msg.payload.light var moist = msg.payload.moist JSONオブジェクトからプロパティごとに取り出すことができます

Slide 52

Slide 52 text

爆発的な普及のために Node-REDの中でのJSONの作成 var light = 2000 var moist = 1000 msg.payload = { “light” : light, “moist” : moist } (例) functionノードの中で作成する 出力 {“light” : 2000, “moist” : 1000}

Slide 53

Slide 53 text

爆発的な普及のために Kafkaとは https://oss.nttdata.com/kafka/kafka.html kafkaは大規模なストリームデータを扱うことができる オープンソースの分散メッセージングシステム は右図のようにデータが生成 される機器やサーバとデータの処理 サーバなどの間に配置され、 生成さ れたストリームデータを受け取り、 一時的にデータを保存しつつ、都度 または必要なタイミングで処理サー バにデータを受け渡します。 ※NTTデータソリューション紹介ページより

Slide 54

Slide 54 text

爆発的な普及のために Kafkaノードのインストール 右上のハンバーガーメニューから パレットの管理を選択する ノードの追加を選択して Kafkaで検索する 2番目のものを選択します node-red-contrib-kafka-manager

Slide 55

Slide 55 text

爆発的な普及のために Kafkaの送信テスト brokerサーバーとtopicを指定してタイムスタンプを送信してみる

Slide 56

Slide 56 text

爆発的な普及のために データの流れ デバイス側 サーバー側

Slide 57

Slide 57 text

爆発的な普及のために mqtt受信データをKafkaに送信 mqttで受信したデータをJSONに変換してKafkaに送信する

Slide 58

Slide 58 text

爆発的な普及のために 参考情報 IoTとは? 重要な4つの構成要素と活用事例、自作のための知識を紹介 https://www.rohm.co.jp/blog/-/blog/id/7405417 IoTを支える新たな通信技術 https://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h2 9/html/nc133200.html ESP32ボードマネージャー https://github.com/espressif/arduino-esp32 某社arduino勉強会ハンズオン https://www.slideshare.net/chabudaigaeshi/02-hands-onpptx Enebular公式ドキュメント https://docs.enebular.com/ja/?_ga=2.68803665.1133606832.1651 417791-389674778.1649496197 組み込みエンジニアの教科書 渡辺登、牧野進二著 2019年4月26日 初版発行 株式会社 シーアンドアール研究所 ISBN 978-4-86354-275-4 IoT開発スタートブック 下島健彦著 2019年8月24日 初版発行 株式会社技術評論社 ISBN 978-4-297-10736-9 c3055 Arduinoで学ぶ組み込みシステム入門 猪俣俊光著 2018年3月30日 第一版発行 森光出版株式会社 ISBN 978-4-627-81831-6 ESP32&Arduino電子工作プログラミング入門 藤本壱著 2020年4月20日初版発行 株式会社技術評論社 ISBN 978-4-297-11205-9 c3055

Slide 59

Slide 59 text

中村 真理 Nakamura Shinri 診療放射線技師 Line API Expert 株式会社B&B Lab. 共同ファウンダー Appendix follow me 株式会社 B&B Lab. 事業内容:IoTハードウェア及びサービスの開発 https://www.facebook.com/nakamura.shinri/ @shinfrom1981