【プログラム】ESP-nowからのGMAIL

 #include <Arduino.h>

#include <esp_now.h>
#include <WiFi.h>
#include "esp32-hal-log.h"
#include <freertos/FreeRTOS.h>    /* FreeRTOSを用いるためのヘッダファイル */
#include <freertos/task.h>
#include "Mailer.h"
#include <esp_pm.h>

const char* wifi_ssid = "**********"; //WiFiのSSID
const char* wifi_pass = "**********"; //WiFiのパスワード

const char* smtp_username = "izumo.lab"; //アカウント名
const char* smtp_password = "bruuqvsbfnglgbcc"; //Mail向けのアプリパスワード
const char* smtp_from_address = "izumo.lab@gmail.com"; //送信元のアドレス
const int smtp_port = 465;
const char* smtp_hostname = "smtp.gmail.com";

const char* to_address = "izumo.papa@gmail.com"; //メッセージを送信するアドレス1
const char* to_address2 = "izumo.mama@gmail.com"; //メッセージを送信するアドレス2
const char* subject = "Door status From ESP32(TEST)"; //メールの件名
const char* content = "Hello, this is ESP32."; //メールの内容

const int LED_RED = 5;
const int LED_GREEN = 19;
bool ledState = false;
bool received = false;
uint8_t doorInfo = 0; //0:unknown 1:open&close 2:open 3:close


 uint8_t slaveAddress[] = { 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }; // 送信側のMACアドレスに書き換えます


 void sleep_ms(uint32_t ms) {
    vTaskDelay(ms / portTICK_PERIOD_MS);
  }
 
  void reset_wifi() {
    WiFi.persistent(false);
    WiFi.disconnect();
    WiFi.mode(WIFI_OFF);
    delay(10);
  }

  Mailer mail(smtp_username, smtp_password, smtp_from_address, smtp_port, smtp_hostname);

  void LED_blink(uint32_t ms){
 
    digitalWrite(LED_RED, HIGH);
    sleep_ms(ms);
    digitalWrite(LED_RED, LOW);
   
  }
  void mailSend(const char* msg){
    log_i("Hello, this is ESP32.");
 
    log_i("Connecting to ", wifi_ssid);
    reset_wifi();
    WiFi.mode(WIFI_STA);
    WiFi.begin(wifi_ssid, wifi_pass);
    while (WiFi.status() != WL_CONNECTED) {
      log_i("wait...");
      sleep_ms(1000);
    }
    log_i("WiFi connected");
    log_i("IP Address: %s", WiFi.localIP().toString().c_str());
 
    mail.send(to_address,to_address2, subject, msg);
 
     //WiFiを切断
    WiFi.mode(WIFI_OFF);
 
    LED_blink(50);
  }

  void sendMail(int doorState){
    if(doorState==LOW){
      mailSend("DoorLock opened.TEST");
      //esp_sleep_enable_ext0_wakeup(GPIO_NUM_15, HIGH);
    }else{
      mailSend("DoorLock closed.TEST");
      //esp_sleep_enable_ext0_wakeup(GPIO_NUM_15, LOW);
    }
  }


void flashLed(int pin) {
    digitalWrite(pin, HIGH);
    delay(500);
    digitalWrite(pin, LOW);
}


void onSend(const uint8_t* mac_addr, esp_now_send_status_t status) {
    char macStr[18];
    snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X",
        mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);

    Serial.println(macStr);
    Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Success" : "Failed");
}

void onReceive(const uint8_t* mac_addr, const uint8_t* data, int data_len) {
    char macStr[18];
    snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X",
        mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
    Serial.println();
    Serial.printf("Last Packet Recv from: %s\n", macStr);
    Serial.printf("Last Packet Recv Data(%d): ", data_len);
    for (int i = 0; i < data_len; i++) {
        Serial.print(data[i]);
        Serial.print(" ");
        if (data[i] == 222) {
            flashLed(LED_RED);
            received = true;
            doorInfo = 1; //1:open&close
        }
    }

}

void espNow_start() {
  WiFi.mode(WIFI_STA);

  WiFi.disconnect();

  if (esp_now_init() == ESP_OK) {
        Serial.println("ESP-Now Init Success");
    }
    flashLed(LED_RED);

    esp_now_peer_info_t peerInfo = {}; //ココ重要
    memcpy(peerInfo.peer_addr, slaveAddress, 6);
    peerInfo.channel = 0;
    peerInfo.encrypt = false;
 
    if (esp_now_add_peer(&peerInfo) != ESP_OK) {
        Serial.println("Failed to add peer");
        return;
    }

    esp_now_register_send_cb(onSend);
    esp_now_register_recv_cb(onReceive);
}

void setup() {

    Serial.begin(115200);
    pinMode(LED_RED, OUTPUT);
    pinMode(LED_GREEN, OUTPUT);
    flashLed(LED_RED);
    flashLed(LED_GREEN);
    Serial.println(WiFi.macAddress()); // このアドレスを送信側へ登録します

    espNow_start();
  }

void loop() {
  // put your main code here, to run repeatedly:
  uint8_t data[2] = { 33,55}; // 送信データ
  if(received){
    delay(100);
    received = false;
    esp_err_t result = esp_now_send(slaveAddress, data, sizeof(data));
    if (result == ESP_OK) {
        Serial.println("Sent with success");
    }
    else {
        Serial.println("Error sending the data");
    }
    digitalWrite(LED_GREEN, HIGH);
    sendMail(doorInfo);
    digitalWrite(LED_GREEN, LOW);
    doorInfo = 0;
    espNow_start();

  }

}

コメント

  1. お客様

    平素より電子製品へのご関心とご愛顧を賜り、誠にありがとうございます。お客様がPC、コンピュータ、プログラミングをはじめとする各種電子製品に強いご興味をお持ちであることに、私どもは大きな共感と敬意を抱いております。その探究心や体験への情熱こそが、日々の技術革新を支える原動力であると考えております。

    現在、弊社はRaspberry Pi 5キット用の新製品を発表した。20,000円以上の価値がある商品なので、Raspberry Pi 5 8GBキットの内容:Raspberry Pi 5 8GBボード(技適マーク付)*1/アクティブクーラー*1/27W PDアダプター(PSE認証)*1/64GB カード*1/Pi 5用黒色ABSケース*1/CAT6 LANケーブル*1/4K Micro HDOUTケーブル*1/ドライバー*1/カードリーダー*2/ケースの設置手順図*1/日本語取扱説明書*1など、豊富な付属品が含まれています。本製品はプログラミング学習、DIYプロジェクト、スマートホーム構築、ロボット実験、レトロゲーム再現、さらには個人用サーバーなど、多彩な用途に対応できる開発プラットフォームです。

    この製品は非常にプロフェッショナルなものなので、プロフェッショナルの方々にAmazonレビューをお願いしたいと思います。もしよろしければ、弊社の製品を購入し、製品の使用感を書いてみませんか。もちろん、製品は無料で提供されます。
    弊社の商品を日本に宣伝したいと思っておりますので、YouTubeで商品レビュー動画と提携関係を作りたいと思っております。YouTubeの動画とアマゾンでレビューできれば、製品は無料です!
    動画が撮れないなら場合は、ブログの日記とアマゾンでレビューできればも良かったですね.ブログ記事とアマゾンレビューを書くことに興味があれば、製品は無料です!
    ご興味がありましたら、ぜひこちらjp@vesiri.com連絡してください!
    なお、ご不明な点がございましたら、ご要望に応じて、提携の形をご相談いたします。

    ご返事頂ければ幸いです、よろしくお願いします。

    敬具
    早川奈子

    返信削除

コメントを投稿