2024.07.07本記事はプロモーションが含まれています。こんにちは、ENGかぴです。SHIELDを実装するとEthernetライブラリを使用してLAN通信ができます。DHT20モジュールから取得した温湿度の情報をHTTPで応答するWebサーバーを実装して動作確認を行いました。UNOに差し込むだけで使用することができます。UNO(以下Arduinoとします。Arduinoのライブラリを使用して動作確認したことをまとめています。SHIELDはイーサネットコントローラーにW5500が使用されておりSPI通信をイーサネットに変換することができます。Arduino環境でイーサネットのプロトコルであるTCP/IPやUDP/IPによる通信を構築することができます。SHIELDのLANポートをケーブルで接続した状態でパソコンのブラウザーからArduinoに実装したWebサーバーに接続要求を送ります。Arduinoは接続要求を受け付けるとDHT20モジュールから取得した温湿度データをHTMLデータで応答します。HTMLデータにブラウザーのリフレッシュ指定を追加して等間隔で接続要求を送信します。UNO用に標準搭載されておりスケッチ例が各種準備されています。本記事ではスケッチ例の「WebServer」を流用して動作確認を行っています。Ethernetライブラリのインクルードからを初期化及び関数の使用方法を説明します。//サーバースタート}EthernetライブラリはSPI通信を使用するためEthernet.hとSPI.hの2つのライブラリをインクルードする必要があります。イーサーネットコントローラーは固有のMACアドレスが割り振られているため6バイトの値を配列で準備します。SHIELDの裏面にMACアドレスが貼り付けてあります。IPAddressクラスの変数としてipをインスタンス化し、引数をIPアドレスを指定します。例ではIPアドレスに「192.168.1.1」を指定しています。EthernetServerクラスの変数としてserverをインスタンス化(serverオブジェクト)し、引数にポート番号を指定します。例ではHTTPデータ用のデフォルトのポートの80を指定しています。Ethernetオブジェクトのbegin()関数でイーサーネットの初期化を行います。第1引数にMACアドレスを指定します。第2引数にIPアドレスを指定します。SHIELDの接続を確認します。SHIELDが確認できるまでループさせるようにしています。linkStatus()関数はイーサーネットに接続状態を確認します。ケーブルの抜き差しでリンクのステータスが切り替わるため特に意識して接続状態を確認する必要はありません。serverオブジェクトのbegin()関数でWebサーバーをスタートします。//クライアント情報を破棄する}EthernetClientクラスの変数としてclientでインスタンス化(clientオブジェクト)し、serverオブジェクトのavailable()関数でサーバーの状態を確認します。クライアントが存在する場合はclientオブジェクトのconnected()関数で接続状態を確認します。ケーブルの断線などで強制的にクライアントが切断した場合などはTCP/IPプロトコルの仕様でパケットが残っていることがあります。クライアント情報が破棄されるまで処理が遅延されることがあるので注意が必要です。clientオブジェクトでクライアントからの受信データをavailable()関数で確認します。受信データがあればread()関数でクライアントから受信したデータを読み込みます。データを読み込んだ後はクライアントにHTMLデータで応答します。応答後はstop()関数でクライアントの情報を破棄します。timConWaitはクライアントの接続後データの受信がなければWhileによるループを抜けるためのタイマです。これにより処理がデータ待ちのままループで固まらないようにしています。client.println("</html>");clientオブジェクトのprint()関数またはprintln()関数でHTMLデータのヘッダーとコンテンツを送信します。5は5秒毎にブラウザーに表示しているデータを更新する指定です。<html>より下は温湿度のデータを送信しています。温湿度のデータを送信した後は</html>でHTMLデータの終了を通知します。IDEでDHTライブラリを追加してDHT20モジュールから温湿度のデータを取得します。dht(ライブラリ名をそのまま入力しても良い)を入力するとライブラリの候補が表示されます。Sensorをインストールします。使用例は以下の通りです。Sensorを選択します。エディターにDHT.h及びGrove_Temperature_And_Humidity_Sensor.hが追加されますが、DHT.hのみのインクルードでも問題ありません。DHT20はI2C通信を使用するのでWire.hも含めてインクルードします。DHTクラスの変数としてdhtに引数を指定してインスタンス化(dhtオブジェクト)します。DHT20モジュールを使用するためDHT20を指定します。Definition」をクリックするとDHT.hが開けるので対象のDHTモジュールのタイプを定義を確認することができます。Wire.begin()でI2C通信の初期化を行い、dhtオブジェクトのbegin()関数でDHT20の初期化を行います。readTempAndHumidity()関数を使用すると温湿度のデータを取得することができます。引数に取得したデータを格納するアドレスを指定します。使用例のようにデータを取得した場所で関数をコールするだけで簡単に測定値が取得できるため手軽に動作確認できます。SHIELDを接続します。LANケーブルをパソコンに接続してイーサネット通信を行います。電源を入れるとDHT20の測定が開始します。パソコンのブラウザーからArduinoのIPアドレスを指定するとDHT20の測定データを含めたHTMLデータで応答します。動作確認はクライアント側のイーサーネットの設定が必要です。設定の一例を説明します。Windows11を対象とします。スタート画面(窓のアイコン)から設定の歯車を選択します。ネットワークとインターネットからネットワークの詳細設定項目を選択します。「ネットワークアダプター」で対象のイーサーネットを選択してIPアドレスなどの設定を行います。動作確認はUSBハブを使用しておりイーサーネット2と表記されていますが、お使いの環境によってイーサーネットの番号は異なります。「その他のアダプターオプション」の編集を選択するとイーサーネット2のプロパティが表示されます。4(TCP/IPv4)」を選択し、プロパティ(R)を選択します。IPアドレスの設定(クライアント側)ArduinoのイーサーネットのIPアドレスを「192.168.1.1」に設定しているため同一のクラスのIPになるようにUSBハブのIPアドレスを設定します。例では「192.168.1.10」を指定しています。Chromeなどのブラウザーを開いてアクセス先にArduinoのアドレス「192.168.1.1」を指定するとブラウザー(クライアント)からArduinoに対してリクエストを送信します。Arduinoから応答があるとブラウザーに温湿度のデータが表示されます。ブラウザーの表示結果ブラウザーの表示を確認すると湿度と温度のデータが表示されています。ブラウザーを開いたままにしていると5秒毎にリフレッシュされ温湿度のデータが更新されていることも確認できました。以下のソースコードはコンパイルして動作確認をしております。コメントなど細かな部分で間違っていたりやライブラリの更新などにより動作しなくなったりする可能性があります。参考としてお使いいただければと思います。}}関連リンクArduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。「書けるが先で、理解が後」を体験しよう!最後まで、読んでいただきありがとうございました。電気電子部門の試験において最近相互インダクタンスの問題が出題されています。自己インダクタンスと相互インダクタンスの関係が分かっていれば簡単に解ける問題です。インダクタンスの定義などについてもまとめています。組み込みエンジニアTWELITE(トワイライト)のインタラクティブモードを実装するTWELITEのインタラクティブモードはZigBee通信の特徴である複数グループで通信する場合に各モジュールに必要な周波数チャンネル、アプリケーションID、再送回数などの重要なパラメータを簡単に設定できるのが特徴です。組み込みエンジニアPICマイコン(PIC16F1827)でSHT35のデータを取得PIC16F1827はI2C(MSSP)通信機能を持っており温湿度センサーであるSHT35-DISから測定データを取得することができます。MCCによるI2C通信の実装例としてSHT35-DISからデータを取得しLCDに温湿度を表示しました。組み込みエンジニアPICマイコン(PIC12F675)のタイマー1の設定と使い方マイコンのソフト開発を行っているとタイマ機能をよく使用します。タイマーのカウントに初期値をセットすることで任意の時間でタイムアップするタイマを作ることができます。タイマーの設定についての考え方について説明しています。XIAO31ESP32-WROOM-32E37TWELITE(トワイライト)26PIC16F182731PIC12F67522ノウハウ(体験談)36趣味と生活29その他6タグオペアンププロフィールENGかぴ当ブログの運営者のENGカピです。組み込みエンジニアとして10年以上の経験を活かしてセンサーモジュール等の動作確認したことをまとめています。広告、アフィリエイト収益で当ブログを運営させていただいております。defined.")}))})()タイトルとURLをコピーしました。