DHT22で取得した温度と湿度をArduinoと使ってLINEに通知したい
ここに実現したいことを箇条書きで書いてください。
1 DHT22で温度と湿度を取得する
2 取得した温度と湿度をLINEで通知する
前提
Arduinoを使い、本体のBOOTボタンを押すと、あらかじめ設定した文字列
(const char* message = "aaaaaa";)をLINEに通知するまではできました。
発生している問題・エラーメッセージ
送信する文字列はchar型でなくてはいけないようですが、
LINEに送信したい文字列はDHT22で取得した温度と湿度なので、
messageはString型でなくてはいけないのですが、String型の文字列をchar型に変換することはできますか?
無理やり、
// 湿度を取得
float humidity = dht.readHumidity();
// 温度を取得
float temperature = dht.readTemperature();
ondo = String(temperature) + String("゚C、");
shitsudo = String(humidity) + String("%です。");
message = String("現在の室温は") + String(ondo) + String("湿度は") + String(shitsudo);
としたところ、エラー(35?)が出てしまいLINE送信できません。
String型をchar型に変換する方法はありませんか?
該当のソースコード
Arduino
1#include <WiFi.h> 2#include <WiFiClientSecure.h> 3#include <DHT.h> 4#include <DHT_U.h> 5 6// WiFi設定 7const char* ssid = "自宅WiFiのSSID"; 8const char* password = "自宅WiFiのパスワード"; 9 10// ピン設定 11const int swPin = 0; 12const int PIN_DHT = 23; 13 14String ondo = ""; 15String shitsudo = ""; 16String soushin = ""; 17 18// LINE Notify設定 19const char* host = "notify-api.line.me"; 20const char* token = "LINEのトークン"; 21const char* message = "aaaaaa"; 22DHT dht(PIN_DHT,DHT22); 23 24void setup() 25{ 26 Serial.begin(115200); 27 delay(10); 28 29 // dhtライブラリの初期処理 30 dht.begin(); 31 32 // We start by connecting to a WiFi network 33 Serial.println(); 34 Serial.println(); 35 Serial.print("Connecting to "); 36 Serial.println(ssid); 37 38 WiFi.begin(ssid, password); 39 40 while (WiFi.status() != WL_CONNECTED) { 41 delay(500); 42 Serial.print("."); 43 } 44 45 Serial.println(""); 46 Serial.println("WiFi connected"); 47 Serial.println("IP address: "); 48 Serial.println(WiFi.localIP()); 49 50 // ピンを入力状態にする 51 pinMode(swPin, INPUT_PULLUP); 52} 53 54// line通知 55void send_line() { 56 57 // HTTPSへアクセス(SSL通信)するためのライブラリ 58 WiFiClientSecure client; 59 60 // サーバー証明書の検証を行わずに接続する場合に必要 61 client.setInsecure(); 62 63 Serial.println("Try"); 64 65 //LineのAPIサーバにSSL接続(ポート443:https) 66 if (!client.connect(host, 443)) { 67 Serial.println("Connection failed"); 68 return; 69 } 70 Serial.println("Connected"); 71 72 // リクエスト送信 73 String query = String("message=") + String(message); 74 String request = String("") + 75 "POST /api/notify HTTP/1.1\r\n" + 76 "Host: " + host + "\r\n" + 77 "Authorization: Bearer " + token + "\r\n" + 78 "Content-Length: " + String(query.length()) + "\r\n" + 79 "Content-Type: application/x-www-form-urlencoded\r\n\r\n" + 80 query + "\r\n"; 81 client.print(request); 82 83 // 受信完了まで待機 84 while (client.connected()) { 85 String line = client.readStringUntil('\n'); 86 if (line == "\r") { 87 break; 88 } 89 } 90 91 String line = client.readStringUntil('\n'); 92 Serial.println(line); 93} 94 95// スイッチの変数宣言 96int sw_val = 0; 97 98void loop() 99{ 100 // put your main code here, to run repeatedly: 101 int sw_state = digitalRead(swPin); 102 103 dht.readHumidity(); 104 dht.readTemperature(); 105 106 if (sw_state==LOW) 107 { 108 // 湿度を取得 109 float humidity = dht.readHumidity(); 110 // 温度を取得 111 float temperature = dht.readTemperature(); 112 113 ondo = String(temperature) + String("゚C、"); 114 shitsudo = String(humidity) + String("%です。"); 115 116 soushin = String("現在の室温は") + String(ondo) + String("湿度は") + String(shitsudo); 117 118 message = soushin; 119 120 send_line(); 121 } 122}
試したこと
char[] charArray = message.ToCharArray();
message = soushin.c_str()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/02/26 11:52
2024/02/26 12:57 編集
2024/02/27 09:12
2024/02/27 10:07
2024/02/27 10:33
2024/02/27 10:36
2024/02/27 10:59