M5Stick-C(ESP32機器)で取得した温度をメール送信するプログラムをArduinoで作っています。
温度を測り、ESP32 Mail Clientライブラリのサンプルを使ってOutlookにメールを送ることはできました。
が、いざ実行環境に入れると『Error sending Email, could not connect to server』とシリアルモニターに表示されて送信できません。
プログラムを改変して調べたところ、どうやらwifi.configで固定IPアドレスを使うとエラーになるようです。
これは何故でしょうか。どうすれば、wifi.configを使ったうえでメールの送信ができるようになるでしょうか?
下にプログラムを載せておきます。(wifi接続部とメール送信部分だけです)
c++
1#include <WiFi.h> 2#include <WiFiClient.h> 3#include <WebServer.h> 4#include <ESPmDNS.h> 5#include <M5StickC.h> 6#include <SPI.h> 7#include <Ethernet.h> 8#include <ArduinoJson.h> 9#include <HTTPClient.h> 10#include <WiFiMulti.h> 11 12#include <Arduino.h> 13#include "ESP32_MailClient.h" 14#include "SD.h" 15 16//The Email Sending data object contains config and data to send 17SMTPData smtpData; 18 19//Callback function to get the Email sending status 20void sendCallback(SendStatus info); 21 22void setup() 23{ 24 Serial.begin(115200); 25 Serial.println(); 26 27 Serial.print("Connecting to AP"); 28 wifi_connect(); 29 30 Serial.println(""); 31 Serial.println("WiFi connected."); 32 Serial.println("IP address: "); 33 Serial.println(WiFi.localIP().toString().c_str()); 34 35 Serial.println(); 36 Serial.println("Sending email..."); 37 38 smtpData.setLogin("outlook.office365.com", 587, "outlookのアカウント名", "outlookのパスワード"); 39 smtpData.setSender("ESP32", "outlookのメールアドレス"); 40 smtpData.setPriority("Normal"); 41 smtpData.setSubject("ESP32 SMTP Mail Sending Test"); 42 smtpData.setMessage("M5StickErrorの温度計からエラーが返りました。", false); 43 smtpData.addRecipient("受信メールアドレス"); 44 smtpData.addAttachFile("/binary_file.dat"); 45 smtpData.addAttachFile("/text_file.txt"); 46 47 smtpData.setSendCallback(sendCallback); 48 49 //Start sending Email, can be set callback function to track the status 50 if (!MailClient.sendMail(smtpData)){ 51 Serial.println("Error sending Email, " + MailClient.smtpErrorReason()); 52 } 53 54 //Clear all data from Email object to free memory 55 smtpData.empty(); 56} 57 58void wifi_connect() { 59 WiFi.config("ipAddress", "gateway", "subnetmask", "DNS"); // Set fixed IP address 60 61 WiFi.mode(WIFI_STA); 62 WiFi.begin("WIFI_SSID", "WIFI_PASSWORD"); 63 64 // 接続完了するまでループ 65 while (WiFi.status() != WL_CONNECTED) { 66 delay(1000); 67 Serial.print("."); 68 WiFi.begin(WIFI_SSID, WIFI_PASSWORD); 69 } 70 Serial.println("WifiConnect!!"); 71} 72 73void loop() 74{ 75} 76 77//Callback function to get the Email sending status 78void sendCallback(SendStatus msg) 79{ 80 //Print the current status 81 Serial.println(msg.info()); 82 83 //Do something when complete 84 if (msg.success()) 85 { 86 Serial.println("----------------"); 87 } 88} 89 90
お力添えの方、よろしくお願いいたします。
> 固定IPアドレスを使うとエラーになる
「固定」が問題なのか、それとも与えたIPアドレスがネットワーク上正しくないのかを切り分ける必要があると思います。
自動で割り振られたものと同じIPアドレスを固定で指定したときにはどうなりますか?
>自動で割り振られたものと同じIPアドレスを固定で指定したときにはどうなりますか?
その場合は送信できることもあります。が、できないことも間々あり、不明瞭です。
・接続出来なかった固定IPアドレスは、ローカルネットワークのネットマスクに含まれているものですか?
・DHCPサーバをいじれるなら、IPアドレスの発給範囲を制限してDHCPで割当の行われないIPアドレスを確保し、それを固定IPとしてESP32に与えたらどうでしょうか。
回答2件
あなたの回答
tips
プレビュー