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

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

shinrinakamura
May 02, 2022
320

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

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

shinrinakamura

May 02, 2022
Tweet

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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のモードの変更
    値の読み出し

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide