Skip to content

◎マイコンプログラミングweek4(発展自己学習)

Week 4: WiFi通信とIoT基礎

目次

  1. WiFi接続の設定と管理
  2. HTTPクライアントの実装
  3. MQTT通信の基礎
  4. クラウドサービスとの連携(例:ThingSpeak)
  5. 実践演習

1. WiFi接続の設定と管理

概要

WiFi接続の基本的な設定方法と管理方法について学びます。Arduino UNO R4 WiFiを用いて、無線LANネットワークに接続するための手順を紹介します。

内容

  • WiFiライブラリのインクルード
  • SSIDとパスワードの設定
  • WiFi接続の初期化
  • 接続状況の確認

コード例

#include <WiFi.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

void setup() {
  Serial.begin(115200);
  delay(10);

  // WiFiに接続
  WiFi.begin(ssid, password);

  // 接続完了まで待機
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  // ここにコードを記述
}

図: WiFi接続のフローチャート

graph TD;
  A[スタート] --> B[WiFiライブラリのインクルード];
  B --> C[SSIDとパスワードの設定];
  C --> D[WiFi接続の初期化];
  D --> E[接続状況の確認];
  E --> F{接続成功?};
  F -- はい --> G[IPアドレスの表示];
  F -- いいえ --> D;
  G --> H[終了];

2. HTTPクライアントの実装

概要

HTTPプロトコルを使用して、Webサーバーと通信する方法を学びます。Arduino UNO R4 WiFiを用いて、HTTPリクエストを送信し、レスポンスを受信する手順を紹介します。

内容

  • HTTPクライアントライブラリのインクルード
  • HTTP GETリクエストの送信
  • HTTP POSTリクエストの送信

コード例

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

void setup() {
  Serial.begin(115200);
  delay(10);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("WiFi connected");

  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;

    http.begin("http://example.com");  // サーバーのURL
    int httpCode = http.GET();

    if (httpCode > 0) {
      String payload = http.getString();
      Serial.println(payload);
    } else {
      Serial.println("Error on HTTP request");
    }

    http.end();
  }
}

void loop() {
  // ここにコードを記述
}

3. MQTT通信の基礎

概要

MQTTプロトコルを使用して、デバイス間でメッセージをやり取りする方法を学びます。Arduino UNO R4 WiFiを用いて、MQTTブローカーに接続し、メッセージの送受信を行う手順を紹介します。

内容

  • MQTTライブラリのインクルード
  • MQTTブローカーへの接続
  • トピックへのメッセージのパブリッシュとサブスクライブ

コード例

#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* mqtt_server = "broker.hivemq.com";

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  Serial.begin(115200);
  delay(10);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("WiFi connected");

  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);

  if (client.connect("ArduinoClient")) {
    client.subscribe("test/topic");
    client.publish("test/topic", "Hello world");
  }
}

void loop() {
  client.loop();
}

void callback(char* topic, byte* message, unsigned int length) {
  Serial.print("Message arrived on topic: ");
  Serial.print(topic);
  Serial.print(". Message: ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)message[i]);
  }
  Serial.println();
}

4. クラウドサービスとの連携(例:ThingSpeak)

概要

クラウドサービスを使用して、センサーデータを保存・表示する方法を学びます。Arduino UNO R4 WiFiを用いて、ThingSpeakにデータを送信する手順を紹介します。

内容

  • ThingSpeakライブラリのインクルード
  • ThingSpeakアカウントの設定
  • データの送信

コード例

#include <WiFi.h>
#include <ThingSpeak.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
unsigned long myChannelNumber = YOUR_CHANNEL_NUMBER;
const char * myWriteAPIKey = "YOUR_API_KEY";

WiFiClient client;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("WiFi connected");

  ThingSpeak.begin(client);
}

void loop() {
  int sensorValue = analogRead(A0);
  ThingSpeak.setField(1, sensorValue);

  int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

  if (x == 200) {
    Serial.println("Channel update successful.");
  } else {
    Serial.println("Problem updating channel. HTTP error code " + String(x));
  }

  delay(20000);
}

5. 実践演習

演習テーマ

  • WiFiを使用したLED遠隔制御
  • センサーデータのクラウド送信
  • MQTTを使用した機器間通信

具体例

  1. WiFiを使用したLED遠隔制御
  2. スマートフォンやPCからHTTPリクエストを送り、LEDのオン/オフを制御します。
  3. ステップ:

    1. ArduinoにWiFi接続
    2. HTTPサーバーを立ち上げる
    3. HTTPリクエストを受信し、LEDを制御
  4. センサーデータのクラウド送信

  5. 温度センサーからのデータをThingSpeakに送信し、リアルタイムでデータを表示します。
  6. ステップ:

    1. センサーからデータ取得
    2. ThingSpeakにデータ送信
    3. ThingSpeakでデータ確認
  7. MQTTを使用した機器間通信

  8. 複数のArduinoデバイスがMQTTブローカーを通じてメッセージを交換し、協調動作を行います。
  9. ステップ:
    1. MQTTブローカーに接続
    2. トピックにメッセージをパブリッシュ
    3. トピックからメッセージをサブスクライブ

UNO R4 WiFiチートシート(NEW TAB)