ESPHOME ESP-01 Relay board

esphome:
  name: esp-01-relay-3

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: “97e03zzzzzzzzzzzzzzzzzzzz”

wifi:
  ssid: Your SSID
  password: Your PAssword

  manual_ip:
    static_ip: 192.168.1.100
    gateway: 192.168.1.1
    subnet: 255.255.255.0
    dns1: 192.168.1.1
    dns2: 8.8.8.8
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: “Esp-01-Relay-3 Fallback Hotspot”
    password: “0fjsyyyyyy”

captive_portal:
switch:
  – platform: gpio
    pin: GPIO0
    name: “Relay Switch 10A”
   

ใช้งานLocal Home Assistant ร่วมกับ Google Home

  1. ติดตั้ง add-on ngrok และเริ่มต้นสร้าง tunnel เข้ามาที่ Home Assistant
  2. Integrate Google Home กับ Home Assistant
  3. ตั้งค่าให้อุปกรณ์ Google Home เชื่อมต่อกับ Home Assistant

ติดตั้ง add-on ngrok และเริ่มต้นสร้าง tunnel เข้ามาที่ Home Assistant

  • cofiiguration
  • Add-ons,Backups & Supervisor
  • ADD-ON STORE
  • มองหา ngtok Client  แล้ว Install 
  • หลังติดไปไปที่ www.ngrok.com เข้าไป sign-up ลงทะเบียน
  • จากนั้น login เข้าไป ดูที่ Getting Started
  • เลือก Your Authtoken
  • จะมี Token ให้ คัดลอกมา
  • กลับมาที่ ngrok Client เลือกเมนูบน  Configuration
  • ที่ Option ให้วางค่า token ที่ได้หน้า auth_token:
				
					log_level: info
auth_token: 27XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
region: us
tunnels:
  - name: hass
    proto: http
    addr: 8123
    inspect: false
    bind_tls: true
				
			
  • จากนั้น SAVE และ RESTART
  • กด menu บน Info เลือก Open WEBUI
  • จะได้ค่า Tunnel URLs คัดลอกมา

2.Integrate Google Home กับ Home Assistant

ไปที่ https://console.actions.google.com/ สมัครใช้งาน 

จากนั้นไปกดสร้าง New Project ตั้งชื่อ

หลังจากตั้งชื่อ project แล้ว จะเข้า Get Started

เลือก Smart Home เลือก Start Building

เลือก Build your Action

กด Add Action(s) จะขึ้น

Build your first Action เลือก Get Started

เลือก Smart Home เลือก Build

ตรง Fulfillment URL

นำลิงค์ tunnel ที่ได้จาก ngrok บน home assistant มาใส่แล้วตามด้วย /api/google_assistant แล้วกด save

กดปุ่มจุด 3 จุดบนมุมขวาบนแล้วเลือก Project Setting

คัดลอก Project ID ไว้

ไปที่ Develop เลือก Account linking

เลือก No, I Only want to allow accoubnt creation on my website

ที่ Linking type เลือก OAuth

https://www.duckdns.org/
ลงทะเบียน
add subdomain ex. xxxxx.duckdns.org
Copy Token
Home Assistant
Settings -> Add-ons ->
ADD-ON STORE เลือก Duckdns -> INSTALL
Configuration
Domains
Token
Save
ไปที่ info กด Start
สมัคร Let’s Encrypt เพื่อ ทำ SSL
Settings -> Add-ons ->
ADD-ON STORE เลือก Let’s Encrypt-> INSTALL
เลือก Configuration
ใส่ Domains
E-mail
กด Save
กลับมาหน้า info
กด Start


แก้ไข configuration.yaml
เพิ่ม
# enable https
http:
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem

ESPEASY DEEP SLEEP

Sleep awake time:ตื่นอยู่นานแค่ไหน วินาที

Sleep time: หลับนานแค่ไหน วินาที

Arduino Preference ESP8266 ESP32

Additional Boards Manager URLs

				
					https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
				
			

millis() ใน arduino

แบบที่ 1

 

				
					unsigned long period = 1000; //ระยะเวลาที่ต้องการรอ
unsigned long last_time = 0; //ประกาศตัวแปรเป็น global เพื่อเก็บค่าไว้ไม่ให้ reset จากการวนloop
 
void setup() {
    Serial.begin(115200);
}
 
void loop() {
   
 if( millis() - last_time > period) {

     last_time = millis(); //เซฟเวลาปัจจุบันไว้เพื่อรอจนกว่า millis() จะมากกว่าตัวมันเท่า period 


     Serial.println("Hello arduinona!");
 }
   
}
				
			

ขอบคุณ: https://www.modulemore.com/article/3/%E0%B8%A5%E0%B8%94%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%83%E0%B8%8A%E0%B9%89-delay-%E0%B8%AB%E0%B8%B1%E0%B8%99%E0%B8%A1%E0%B8%B2%E0%B9%83%E0%B8%8A%E0%B9%89-millis-%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B8%94%E0%B8%B5%E0%B8%81%E0%B8%A7%E0%B9%88%E0%B8%B2

แนวที่ 2

				
					int period = 1000;
unsigned long time_now = 0;

void setup() {
Serial.begin(115200);
}

void loop() {
time_now = millis();

Serial.println(“Hello”);

while(millis() < time_now + period){
//wait approx. [period] ms
}
}
				
			

ติดตั้ง Teamviewer บน Raspberry PI OS

64 Bit Preview Version https://download.teamviewer.com/download/linux/teamviewer_arm64.deb

32 Bit Preview Version https://download.teamviewer.com/download/linux/teamviewer_armhf.deb

ใช้คำสั่ง wget เช่น download 32 bits

wget https://download.teamviewer.com/download/linux/teamviewer_armhf.deb

sudo dpkg -i teamviewer_armhf.deb หรือ เรียกไฟล์ติดตั้งบน desktop

เชื่อม Wifi บน Raspberry Pi OS โดยไม่มีจอ

สร้างไฟล์ชื่อ wpa_supplicant.conf ไว้ข้างนอก

				
					country=TH # Your 2-digit country code
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1 
network={
ssid="YOUR_NETWORK_NAME"
psk="YOUR_PASSWORD"
key_mgmt=WPA-PSK
}
				
			

กรณีที่มีหลาย SSID 

				
					country=TH # Your 2-digit country code
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1 

network={
ssid="YOUR_NETWORK_NAME1"
psk="YOUR_PASSWORD1"
key_mgmt=WPA-PSK
id_str="ID_1"
priority=100
}

network={
ssid="YOUR_NETWORK_NAME1"
psk="YOUR_PASSWORD1"
key_mgmt=WPA-PSK
id_str="ID_2"
priority=99
}
				
			

เปิด SSH บน Raspberry Pi OS โดยไม่มีจอ

สร้างไฟล์ชื่อ ssh ไม่มีนามสกุลไว้

ใน Windows ไป command prompt สิทธิ์ admin

ไป ที่ Drive flash เช่น H:

copy con ssh. Enter

จากนั้นกด Ctrl-Z

ไฟล์สร้างไว้

NodeMCU ESP8266 TM1637 NTP DHT11

  • NODEMCU ESP8266
  • 4 Digit Seven Segment TM1637
  • DHT11
  • SevenSegmentTM1637.h

#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include “SevenSegmentTM1637.h”
#include “SevenSegmentExtended.h”
#include <DHT.h>

#define CLK D2 // Define the connections pins:
#define DIO D3
#define DHTPIN D5 // Pin sensor is connected to

char cdmy[11];

// Set DHT type, uncomment whatever type you’re using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
float temp_c ;
float humi ;
char tempf[4];
float tempr;
char humif[4];
//SevenSegmentTM1637 display(CLK, DIO); // Create display object of type TM1637Display:
SevenSegmentExtended display(CLK, DIO);
DHT dht = DHT(DHTPIN, DHTTYPE);

const char *ssid = “xxxxx”;
const char *password = “xxxxxxx”;

//const long utcOffsetInSeconds = 19802;
const long utcOffsetInSeconds = 25200;

// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, “1.th.pool.ntp.org”, utcOffsetInSeconds);

void setup(){
display.begin(); // initializes the display
display.setBacklight(100); // set the brightness to 100 %
Serial.begin(9600);
Serial.println();
Serial.println(“DHTxx test!”);
dht.begin();
// Begin serial communication at a baud rate of 9600:

WiFi.begin(ssid, password);

while ( WiFi.status() != WL_CONNECTED ) {
delay(500);
Serial.print (“.”);
}

timeClient.begin();
}

void loop() {

// Read the temperature as Celsius and Fahrenheit:
temp_c = dht.readTemperature();
humi = dht.readHumidity();

// print both to serial console
Serial.println();
Serial.print(temp_c);
Serial.print(“<-T H->”);
Serial.println(humi);

timeClient.update();
unsigned long epochTime = timeClient.getEpochTime(); //get date

int currentHour = timeClient.getHours();
int currentMinute = timeClient.getMinutes();

struct tm *ptm = gmtime ((time_t *)&epochTime);
int monthDay = ptm->tm_mday;
sprintf(cdmy,” %02d-%02d-%02d “,ptm->tm_mday,ptm->tm_mon+1,ptm->tm_year+2443);

for (int i = 0; i < 2; i++) {
display.clear(); // clear the display
display.print(cdmy); // print right->left day month year
delay(100);
}
// print time hour min
//for (int i = 0; i < 2; i++) {
display.clear(); // clear the display
// print hour min for
display.printTime(currentHour,currentMinute, true); //print hour.min
//display.blink(); // blink
delay(1000);

// }

display.setColonOn(1); // open dot . led version dot if use time led : show led
display.printNumber(static_cast<int>(temp_c * 100),false,false,false);
display.printRaw(88,3); // display c at location 3
display.blink();
delay(2000);
display.printRaw(128,1);
display.printNumber(static_cast<int>(humi * 100),false,false,false);
display.printRaw(116,3); // display h at location 3
display.blink();
delay (3000);
display.setColonOn(false); // close colon
display.clear();

}xxx