01_WifiServer1to1

CherryIoTをWi-Fiサーバーにする

CherryIoTをアクセスポイント兼サーバーにし、受信データでLEDを制御します。

LEDモジュールWi-Fi通信
1

準備する

CherryIoTとモジュールを接続する

CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。

LEDモジュール

LEDモジュール

接続先:A

2台のCherryIoTを用意する

このサンプルは、サーバー用とクライアント用の2台のCherryIoTを組み合わせて使用します。もう1台には「02_WifiClient1to1」のプログラムを書き込みます。

2

サンプルコード

GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。

01_WifiServer1to1.ino
GitHubで開く
GitHubからコードを読み込んでいます...
3

プログラムを書き込む

上のサンプルコードをコピーし、Arduino IDEに貼りつけます。

ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。

初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。

4

動作確認

クライアント側の光センサーを明るくするとサーバー側のLEDが点灯し、暗くすると消灯するなら成功です。

動作中、シリアルモニターにはWi-Fiの接続情報、クライアントの接続状況、受信した値が表示されます。

Arduino IDEの画面右上にあるアイコンをクリックすると、 画面下にシリアルモニターが表示されます。

Arduino IDEでシリアルモニターを表示する場所
5

コードの解説

WiFi.softAPでアクセスポイントを作り、接続したクライアントから受け取った値でLEDを切り替えます。

01_WifiServer1to1.ino
GitHubで開く
GitHubからコードを読み込んでいます...

Serial.begin(115200);シリアルモニターへ文字や測定値を表示するため、通信速度を115200bpsに設定します。

#include<WiFi.h>CherryIoTのWi-Fi機能を使うため、WiFiライブラリを読み込みます。ライブラリは、あらかじめ用意された機能をプログラムから使えるようにする仕組みです。

const char *ssid="ESP32-WiFi-1";サーバー用CherryIoTが作るWi-Fiの名前を、ssidへ保存します。SSIDは、接続先を見分けるためのWi-Fiネットワーク名です。クライアント側にも同じ名前を設定します。

const char *pass="esp32wifi";サーバー用CherryIoTへ接続するときに使うパスワードを、passへ保存します。クライアント側にも同じパスワードを設定します。

const IPAddress ip(192,168,0,1);サーバー用CherryIoTのIPアドレスを192.168.0.1に設定します。IPアドレスは、ネットワーク上の機器を識別するための番号です。

WiFiServer server(80);Wi-Fi経由の接続を受け付けるサーバーを用意します。80は通信の受付口を表す「ポート番号」で、Web通信で一般的に使われる番号です。作成したサーバーは以降のコードでserverという名前で操作します。

WiFi.softAP(ssid,pass);設定したSSIDとパスワードを使い、CherryIoTをWi-Fiアクセスポイントとして起動します。アクセスポイントは、ほかの機器が接続するためのWi-Fiを作る役割です。

WiFi.softAPConfig(ip,ip,subnet);アクセスポイントのIPアドレス、ゲートウェイ、サブネットマスクを設定します。サブネットマスクは、同じネットワークに含まれる範囲を決める値です。

server.begin();クライアントからの接続を受け付けるサーバーを開始します。

WiFiClient client = server.available();サーバーへ接続してきたクライアントがあるかを確認し、接続があればclientへ保存します。クライアントは、サーバーへデータを送る側の機器です。

if(client){クライアントが接続してきた場合だけ、受信処理を開始します。

while(client.connected()){クライアントが接続している間、受信データを確認し続けます。

if(client.available()){クライアントから読み取れるデータが届いているかを確認します。

value=client.read();クライアントから送られた1バイトのデータを読み取り、valueへ保存します。

Serial.println(value);受信した値をシリアルモニターに表示します。

if( value == 1 ) {受信値が1かを判定します。

digitalWrite(ledPin, HIGH);受信値が1のときはLEDを点灯します。

delay(10);0.01秒待ちます。

else {ifの条件(受信値が1)を満たさないとき、次の処理を実行します。

digitalWrite(ledPin, LOW);LEDを消灯します。