Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ESP32で始めようIoT開発ハンズオン

shinrinakamura
May 02, 2022
160

 ESP32で始めようIoT開発ハンズオン

ESP32で始めようIoT開発ハンズオンで使用したスライドです。
qiitaと合わせてみていただくとわかりやすいと思います。
https://qiita.com/shinfrom/items/2f350d789a89b7086df3

shinrinakamura

May 02, 2022
Tweet

Transcript

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

  2. 中村 真理 Nakamura Shinri 診療放射線技師 Line API Expert 株式会社B&B Lab.

    共同ファウンダー 自己紹介 株式会社 B&B Lab. 事業内容:IoTハードウェア及びサービスの開発
  3. Nakamura Shinri http://b-and-b-lab.jp 手動ON 自動 ▪開発実績 SORACOM Air を活用した自動潅水システムの開発 〇農業ハウス向け自動潅水システム(開発中)

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

    https://qiita.com/shinfrom/items/2f350d789a89b7086df3
  5. 爆発的な普及のために IoTとは IoTとはどのようなものでしょう? IoTと聞いてどのようなものを思い浮かべますか?

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

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

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

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

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

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

  12. 爆発的な普及のために IoTの通信方法 https://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h29/html/nc133200.html 広域・遠距離 低速 低コスト 省電力 狭域・短距離 高速 高コスト

    消費電力大 Wi-Fi LTE LPWA BLE RFID NFC ZigBee 5G
  13. 爆発的な普及のために 今回作成するもの デバイス側 サーバー側

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  33. 爆発的な普及のために 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のモードの変更 値の読み出し
  34. 爆発的な普及のために 感光センサーでLEDを操作する 明るい 暗い 閾値(スレッショルド) th_light 閾値よりも暗いときはLEDを光らせる if (Measurevalue <

    th_light ){ //LEDを点灯させる } else { //LEDを消灯させる } スレッショルドを変化させてみてください
  35. 爆発的な普及のために 水分センサーの仕組み https://wiki.dfrobot.com/Capacitive_Soil_Moisture_Sensor_SKU_SEN0193 動作原理 静電容量方式で土壌水分レベルを測定する 水分量が上がると出力値が下がり 水分量が下がると出力値が上がる 定量的な測定はできない

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

  37. 爆発的な普及のために Wi-Fiを利用した通信 MQTT CoAP HTTP 今回使用するので細かく説明します 1対1の通信用のプロトコル IoT用の簡易版HTTPともいえる リアルタイムなセンサーデータの送受信に向いています 機器同士の通信に向いています

    HTML文書や画像、音声、動画等のコンテンツの送受信に 用いられるプロトコル
  38. 爆発的な普及のために MQTTについて MQTT 二者間の非同期通信をサポートするプロトコル。 メッセージの送信側と受信側を空間という点でも時間という点でも切 り離すことができる。 双方向通信ができるのにヘッダーが小さいのが特徴

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

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

    がどの処理なのか考えてみましょう。 ソースコードはこちらです
  41. 爆発的な普及のために JSONとは Javascriptのオブジェクトを文字列で表すデータフォーマット 異なるプログラミング言語間のデータの受け渡しが楽になる Webアプリでは、サーバーとwebクライアント間でのデータの受け渡 しにJSONがよく用いられる {“key” : value, “key2”

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

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

    配列
  44. 爆発的な普及のために Payloadの作成 int light; int moist; char payload[120]; sprintf(payload, "{"light":%d,"moist":%d}",

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

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

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

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

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

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

  51. 爆発的な普及のために データの分割 受信データの取り出し functionノードを利用してデータを取りだします var light = msg.payload.light var moist

    = msg.payload.moist JSONオブジェクトからプロパティごとに取り出すことができます
  52. 爆発的な普及のために Node-REDの中でのJSONの作成 var light = 2000 var moist = 1000

    msg.payload = { “light” : light, “moist” : moist } (例) functionノードの中で作成する 出力 {“light” : 2000, “moist” : 1000}
  53. 爆発的な普及のために Kafkaとは https://oss.nttdata.com/kafka/kafka.html kafkaは大規模なストリームデータを扱うことができる オープンソースの分散メッセージングシステム は右図のようにデータが生成 される機器やサーバとデータの処理 サーバなどの間に配置され、 生成さ れたストリームデータを受け取り、

    一時的にデータを保存しつつ、都度 または必要なタイミングで処理サー バにデータを受け渡します。 ※NTTデータソリューション紹介ページより
  54. 爆発的な普及のために Kafkaノードのインストール 右上のハンバーガーメニューから パレットの管理を選択する ノードの追加を選択して Kafkaで検索する 2番目のものを選択します node-red-contrib-kafka-manager

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

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

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

  58. 爆発的な普及のために 参考情報 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
  59. 中村 真理 Nakamura Shinri 診療放射線技師 Line API Expert 株式会社B&B Lab.

    共同ファウンダー Appendix follow me 株式会社 B&B Lab. 事業内容:IoTハードウェア及びサービスの開発 https://www.facebook.com/nakamura.shinri/ @shinfrom1981