import machine
from machine import Pin
import network
import time
import urequests
import json
import ubinascii
import os
import dht
# AP
WIFI_SSID1 = '1234' # "Your network name";
WIFI_PASS1 = '5678' # "Your network password";
WIFI_SSID2 = "2345" # Your WiFi SSID
WIFI_PASS2 = "6789" # Your WiFi Password
WIFI_SSID3 = "3456" # Your WiFi SSID
WIFI_PASS3 = "7890" # Your WiFi Password
# WIFI_SSID = "Wokwi-GUEST"
# WIFI_PASS = ""
# Google Apps Script Web App
GSCRIPT_ID = 'AKfycbxMjwPXNzdXrWv_sHVLu1oURQuoPP9DQRWAPdYRxRiV7aZFmOG5wuQT_VODvmT7nfUf'
GOOGLE_SCRIPT_URL = 'https://script.google.com/macros/s/'+GSCRIPT_ID+'/exec' #Google Apps Script Web API
# Deep Sleep 間隔時間(單位:毫秒)=> 這裡設置為 1 小時
SLEEP_DURATION_MS = 60 * 60 * 1000
# SLEEP_DURATION_MS = 10 * 1000
button_down = False
button_up = False
# 連接 Wi-Fi
def connect_wifi():
print("Scanning for WiFi networks, please wait...")
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
num = 0
for (ssid, bssid, channel, RSSI, authmode, hidden) in wifi.scan():
if WIFI_SSID1 in ssid:
WIFI_SSID = WIFI_SSID1 # Your WiFi SSID
WIFI_PASS = WIFI_PASS1 # Your WiFi Password
num=1
break
elif WIFI_SSID2 in ssid:
WIFI_SSID = WIFI_SSID2 # Your WiFi SSID
WIFI_PASS = WIFI_PASS2 # Your WiFi Password
num=2
break
elif WIFI_SSID3 in ssid:
WIFI_SSID = WIFI_SSID3 # Your WiFi SSID
WIFI_PASS = WIFI_PASS3 # Your WiFi Password
num=3
break
elif "Wokwi-GUEST" in ssid:
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASS = ""
num=4
break
if (num == 0):
print("Couldn't get a wifi connection")
while True:
pass
# authmodes = ['Open', 'WEP', 'WPA-PSK' 'WPA2-PSK4', 'WPA/WPA2-PSK']
print("* {:s}".format(ssid))
# print(" - Auth: {} {}".format(authmodes[authmode], '(hidden)' if hidden else ''))
print(" - Channel: {}".format(channel))
print(" - RSSI: {}".format(RSSI))
print(" - BSSID: {:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}".format(*bssid))
if not wifi.isconnected():
print('Connecting to network...')
wifi.connect(WIFI_SSID, WIFI_PASS)
while not wifi.isconnected():
time.sleep(1)
print('Network config:', wifi.ifconfig())
return
def post_to_google_sheets(url, temp, humidity):
headers = {'Content-Type': 'application/json'}
payload = json.dumps({
'temperature': temp,
'humidity': humidity,
})
try:
# 發送請求到 Google Sheets
response = urequests.post(url,
headers=headers,
data=payload)
print("Weather information uploaded to Google Sheets!", response.text)
response.close()
except Exception as e:
print('Failed to send data:', e)
def go_to_sleep():
print(f"Going to sleep for {SLEEP_DURATION_MS / 1000} seconds...")
time.sleep(1) # 確保訊息輸出完成
machine.deepsleep(SLEEP_DURATION_MS)
# Function to handle button press interrupt (optional)
def button_press(pin):
global button_down
led2_pin.value(not led2_pin.value())
button_down = True
# Start Function
if __name__ == '__main__':
print(os.uname())
print("Hello, " + os.uname().sysname + "!")
# ESP32 unique ID
CLIENT_ID = ubinascii.hexlify(machine.unique_id())
print("Unique ID: ", end="")
print(CLIENT_ID)
# Define GPIO pins for LED and push button
led1_pin = Pin(4, Pin.OUT)
led2_pin = Pin(2, Pin.OUT) # Initialize LED on GPIO2
led1_pin.value(False)
led2_pin.value(False)
button_pin = Pin(35, Pin.IN, Pin.PULL_UP) # Internal pull-up resistor
# Attach interrupt to the push button pin
button_pin.irq(trigger=Pin.IRQ_FALLING, handler=button_press)
dht_sensor = dht.DHT22(machine.Pin(15))
connect_wifi() # Connecting to WiFi Router
while True:
led1_pin.value(not led1_pin.value())
dht_sensor.measure()
temp = dht_sensor.temperature()
humidity = dht_sensor.humidity()
post_to_google_sheets(GOOGLE_SCRIPT_URL, temp, humidity)
time.sleep(3600) # 每小時上傳一次
# go_to_sleep()