いよいよ内蔵WiFiを活用する時期が来た!
前回のセンサー情報をWebからでも見れるようにする。
処理の流れ
setup() { WiFi初期化 Web初期化 センサー初期化 } loop() { If (Webからリクエスト) .1 パラメタよりLED点/滅 .2 センサー情報取得 .3 クライアントに返信 Else .1 センサー情報取得 .2 LCDに情報表示 }
setup()
- WiFi 初期化:内蔵WiFiをアクセスポイントに接続
- Web初期化:内蔵Webサーバを立ち上げる
- センサー初期化:BMP280を初期化
loop()
- Webからのリクエストをチェックする
システム構成
完成したプログラム
/* * */ #include <Wire.h> #include <Adafruit_BMP280.h> #include <LiquidCrystal_I2C.h> //For SPI connection! #define BMP_SCK D5 #define BMP_MISO D6 #define BMP_MOSI D7 #define BMP_CS D3 Adafruit_BMP280 bmp; // I2C // Adafruit_BMP280 bmp(BMP_CS); // hardware SPI // Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); // Set the LCD address to 0x27 for a 16 chars and 2 line display LiquidCrystal_I2C lcd(0x27, 16, 2); #include <ESP8266WiFi.h> const char* ssid = "SSID"; const char* password = "WIFI PASS"; int ledPin = BUILTIN_LED; WiFiServer server(80); void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, HIGH); lcd.begin(0,2); // sda=GPIO_0, scl=GPIO_2 lcd.init(); // Turn on the backlight. lcd.backlight(); // Connect to WiFi network lcd.print("Connect to "); lcd.println(ssid); WiFi.begin(ssid, password); lcd.setCursor(0, 1); while (WiFi.status() != WL_CONNECTED) { delay(500); lcd.print("."); } lcd.println(""); lcd.println("WiFi connected"); // Start the server server.begin(); lcd.println("Server started"); // Print the IP address lcd.setCursor(0, 0); lcd.print(WiFi.localIP()); lcd.println("/"); if (!bmp.begin(0x76)) { lcd.println("Could not find BMP180 or BMP085 sensor at 0x77"); while (1) {} } } void lcd_show() { lcd.setCursor(0, 1); lcd.print(bmp.readTemperature()); lcd.print("C, "); lcd.print(bmp.readPressure() / 100 ); lcd.print("P "); // print the number of seconds since reset: lcd.print(millis() / 1000); delay(2000); } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (!client) { lcd_show(); delay(1); return; } // Wait until the client sends some data lcd.println("new client"); // while(!client.available()){ // delay(1); // } // Read the first line of the request String request = client.readStringUntil('\r'); lcd.println(request); client.flush(); // Match the request int value = LOW; if (request.indexOf("/LED=ON") != -1) { digitalWrite(ledPin, LOW); value = HIGH; } if (request.indexOf("/LED=OFF") != -1){ digitalWrite(ledPin, HIGH); value = LOW; } // Return the response client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); // do not forget this one client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.print("Temp = "); client.print(bmp.readTemperature()); client.println(" Celsius <br>"); client.print("Pres = "); client.print(bmp.readPressure()); client.println(" Pascal <br>"); client.print("Led pin is now: "); if(value == HIGH) { client.print("On"); } else { client.print("Off"); } client.println("<br><br>"); client.println("Click <a href=\"/LED=ON\">here</a> turn the LED ON<br>"); client.println("Click <a href=\"/LED=OFF\">here</a> turn the LED OFF<br>"); client.println("</html>"); delay(1); lcd.println("Client disconnected"); }