実際に書いたプログラムコード
前回までで何とか形には出来ましたが、後は動かす為にプログラムコードを書かないといけません。これが結構、難しくもあり楽しくもあります。
しかし、最近ではネットの力を借りればほとんどコピペでなんとかなりそうですね。それでも何をしているかは理解したいですが、ドハマりすると前に進まなくなるので、動けばよい精神で頑張て行こうと決めました(笑)
先ず、僕がコピペで集めたコードや自分で修正したコードです。
#include <WiFi.h>
#include <WiFiMulti.h>
#include <ssl_client.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
//****************************************
//* Wi-Fiの設定
//****************************************
const char* ssid = "ここに家のルーター名";
const char* password = "ここに家のルーターのパスワード";
//const char* ssid = "ここに会社のルーター名";
//const char* password = "ここに会社のルーターのパスワード";
void wifiConnect() {
WiFi.disconnect();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); // Wi-Fi接続
while (WiFi.status() != WL_CONNECTED) { // Wi-Fi 接続待ち
delay(100);
Serial.printf(".");
}
Serial.println("\nwifi connect ok");
}
//****************************************
//* LINEへメッセージ送信
//****************************************
void send(String message) {
const char* host = "notify-api.line.me";
const char* token = "ここにLINE Notifyで発行したトークン";
WiFiClientSecure client;
client.setInsecure(); //←これがないと動きませんでした!!
Serial.println("Try");
//LineのAPIサーバに接続
if (!client.connect(host, 443)) {
Serial.println("Connection failed");
return;
}
Serial.println("Connected");
//リクエストを送信
String query = String("message=") + message;
String request = String("") +
"POST /api/notify HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Authorization: Bearer " + token + "\r\n" +
"Content-Length: " + String(query.length()) + "\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n\r\n" +
query + "\r\n";
client.print(request);
//受信終了まで待つ
while (client.connected()) {
String line = client.readStringUntil('\n');
Serial.println(line);
if (line == "\r") {
break;
}
}
String line = client.readStringUntil('\n');
Serial.println(line);
}
//****************************************
//* 音楽の作成~ファミマ
//****************************************
void playmusic_famima() {
ledcWriteTone(1,740) ; // ファ#
delay(300) ;
ledcWriteTone(1,587) ; // レ
delay(300) ;
ledcWriteTone(1,440) ; // ラ
delay(300) ;
ledcWriteTone(1,587) ; // レ
delay(300) ;
ledcWriteTone(1,659) ; // ミ
delay(300) ;
ledcWriteTone(1,880) ; // ラ
delay(600) ;
ledcWriteTone(1,880) ; // ラ
delay(300) ;
ledcWriteTone(1,659) ; // ミ
delay(300) ;
ledcWriteTone(1,740) ; // ファ#
delay(300) ;
ledcWriteTone(1,659) ; // ミ
delay(300) ;
ledcWriteTone(1,440) ; // ラ
delay(300) ;
ledcWriteTone(1,587) ; // レ
delay(600) ;
// delay(2000) ; // 2秒後に繰り返す
ledcWriteTone(1,0) ; // 消音
}
//****************************************
//* 音楽の作成~マック
//****************************************
void playmusic_mac() {
ledcWriteTone(1,784) ; // ソ
delay(200) ;
ledcWriteTone(1,698) ; // ファ
delay(200) ;
ledcWriteTone(1,784) ; // ソ
delay(200) ;
ledcWriteTone(1,0) ; // 消音
delay(200) ;
ledcWriteTone(1,784) ; // ソ
delay(200) ;
ledcWriteTone(1,698) ; // ファ
delay(200) ;
ledcWriteTone(1,784) ; // ソ
delay(200) ;
ledcWriteTone(1,0) ; // 消音
delay(200) ;
ledcWriteTone(1,784) ; // ソ
delay(200) ;
ledcWriteTone(1,698) ; // ファ
delay(200) ;
ledcWriteTone(1,784) ; // ソ
delay(200) ;
ledcWriteTone(1,0) ; // 消音
}
//****************************************
//* 音楽の作成~マリオ
//****************************************
void playmusic_mario() {
ledcWriteTone(1,659) ; // ミ
delay(100) ;
ledcWriteTone(1,659) ; // ミ
delay(100) ;
ledcWriteTone(1,0) ; // 消音
delay(100) ;
ledcWriteTone(1,659) ; // ミ
delay(100) ;
ledcWriteTone(1,0) ; // 消音
delay(100) ;
ledcWriteTone(1,523) ; // ド
delay(100) ;
ledcWriteTone(1,659) ; // ミ
delay(100) ;
ledcWriteTone(1,0) ; // 消音
delay(100) ;
ledcWriteTone(1,784) ; // ソ
delay(100) ;
ledcWriteTone(1,0) ; // 消音
delay(100) ;
ledcWriteTone(1,0) ; // 消音
delay(100) ;
ledcWriteTone(1,0) ; // 消音
delay(100) ;
ledcWriteTone(1,392) ; // ソ
delay(100) ;
ledcWriteTone(1,0) ; // 消音
}
void setup() {
Serial.begin(115200);
Serial.println("setup start");
pinMode(25,INPUT_PULLUP);
wifiConnect();
//音楽の初期設定
ledcSetup(1,12000,8);
ledcAttachPin(27,1);
}
void loop() {
// put your main code here, to run repeatedly:
// タクトスイッチが押されたら実行
if (digitalRead(25) == LOW) {
Serial.println("25 pin on");
long iRandNum;
iRandNum = random(3);
Serial.println(iRandNum);
if(iRandNum == 0) {
playmusic_famima(); //音を鳴らす ファミマ
} else if (iRandNum == 1) {
playmusic_mac(); //音を鳴らす マック
} else {
playmusic_mario(); //音を鳴らす マリオ
}
send("FAXが届きました。");
}
}
緑の太文字と青の太文字は、ご自身の環境によって変わってきます。
緑の太文字は、自宅のルーターと会社のルーターの設定です。自宅と会社両方コードを書いて、使用状況によって使用しない方をコメントで止めています。毎回コードを書き換えるのは面倒だったので(笑)
青の太文字は、ESP32側で使用しているピン番号です。
後、ネットでコピペして簡単に動くだろうと高を括っていたのですが、Wi-Fiに全然繋がりませんでした。ESP32が壊れているのかとも思ったのですが、二日くらいバトルしたのち、どうも赤の太文字のclient.setInsecure(); これがないと動きませんでした。環境によって違うのかは不明ですが、僕の環境ではいるみたいです。ドハマりしそうなのでここでも、これはいるものだって感じで軽く流しました(^_^;)
メロディーに関しては、一つでも良かったのですが、押してくれる人の楽しみも作っておこうと思い、ランダムで3曲のどれかが鳴るようにしてみました。
メロディーに関してもコピペで、乱数のみ調べて付け加えました。
最終行の ”FAXが届きました。 ”がLINEに届く通知文字です。
Arduinoのプログラムは基本的に、setup()関数とloop()関数でなりたっているみたいです。setup()関数の上には各設定を書いています。こういうものだとここでも思っていました(笑)
そして、プログラムをESP32ボードに書き込みエラーが出なければ作業終了です。
次回は実行の確認をして無事終了です。
お疲れ様でした!!
コメント