ESP8266 : マイコンなのにHello, world!
LチカをしたESP-WROOM-02だが,
やっぱりESP8266の威力を体験するためにはWi-Fi関連を使わねばならない.
そこで, (マイコンでは珍しく)Hello, world!
をする.
Web Server
Web ServerでHello, world!
する.
またArduino IDEでお茶を濁する.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#define WIFI_SSID "your_ssid"
#define WIFI_PWD "your_password"
ESP8266WebServer server(80);
void setup() {
Serial.begin(115200);
// WiFi接続
WiFi.begin(WIFI_SSID, WIFI_PWD);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("Wi-Fi connected.");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
// Hello, wprld!送信
server.on("/", [](){
server.send(200, "text/html", "<h1>hello, world!</h1>");
});
server.begin();
}
void loop() {
server.handleClient();
}
WiFi.localIP()
でIPアドレスを取得できるので, そこに接続すると以下のように表示される.
ESP8266WebServer
関係は色々書き方があるみたい.
ここで使っているラムダ式は
ここを参考にした.
FS.h
を使って外部ファイル・画像を表示させることもできるらしい(参考).
POST
将来的にWeb APIを叩くことを見据え, POSTでもHello, world!
してみる.
POSTの説明はWikipediaに任せようと思ったのに,
意外なことに日本語版が無かった.
私は現代っ子なので, 今回はLINE Notifyを叩いてみる. またもやArduino IDE.
#include <ESP8266WiFi.h>
#include <WiFiClientSecureAxTLS.h>
#define WIFI_SSID "your_ssid"
#define WIFI_PWD "your_password"
const char* line_api = "notify-api.line.me";
const char* line_token = "your_token";
void line_send(String message) {
axTLS::WiFiClientSecure client;
// APIに接続
if (!client.connect(line_api, 443)) {
Serial.println("Connection failed.");
return;
}
Serial.println("Connection opend.");
String query = "message=" + message;
client.println("POST /api/notify HTTP/1.1");
client.println("Host: " + String(line_api));
client.println("Authorization: Bearer " + String(line_token));
client.println("Content-Length: " + String(query.length()));
client.println("Content-Type: application/x-www-form-urlencoded");
client.println();
client.println(query);
client.stop();
while (client.connected()) {
String line = client.readStringUntil('\n');
Serial.println(line);
}
Serial.println("Message sent.");
}
void setup() {
// WiFi接続
WiFi.begin(WIFI_SSID, WIFI_PWD);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("Wi-Fi connected.");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
// Hello, world!送信
line_send("Hello, world!");
}
void loop() {
delay(10000);
}
LINE Notifyのトークン取得や叩き方については, ここを参考にした.
同じようにLINE Notifyを叩いている例があった(参考)が,
これはどうも動かなかった.
2017年の記事だから, 仕組みが変わったのか?
色々調べていて,
このサイトを参考に
WiFiClientSecureAxTLS.h
を指定してみると動いた.
一応断わっておくが, 私もタイ語は読めない.
AxTLSは組み込み用のSSLライブラリらしいが,
具体的にそれがなんなのか,
どうしてライブラリに付属していたのかはわからない.
SSL関係の仕組みについて勉強する必要がありそう.
ちなみに, リセットボタンを連打してはいけない.
LINE Notifyは送信専用なので, ユーザからのメッセージに対してイベントをしたいなら Messageing APIになる. ただ, ESP8266でどれだけできるかは知らない.