The Giga R1 WIFI is on the left. It is the I2C Master. It has Wifi and RTC clock configured. The Arduino Mega 2560 is a I2C slave with address 0x15.
variables.py
The Giga R1 Wifi Micropython code uses different pinouts than Arduino pinouts. I started this file to standardized my code with the Arduino pinout.
# SSID
username = "xxxx"
spw = "xxxx"
# PINOUT
D52 = "PK2"
D53 = "PG7"
# I2C
D20 = "PB11"
D21 = "PH4"
wifi.py
The Giga R1 Wifi is internet capable. You see that the username and password are called from variables.py.
import network, variables
class WIFI:
WIFI_NETWORK = variables.username
WIFI_PASSWORD = variables.spw
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_NETWORK, WIFI_PASSWORD)
dst.py
This file calibrates the first and last day of daylight savings time.
March is 2nd Sunday at 2am
November is 1st Sunday at 2am
import ntptime, time
class DST:
ntptime.settime()
year = time.localtime()[0] #get current year
HHMarch = time.mktime((year,3 ,(14-(int(5*year/4+1))%7),2,0,0,0,0,0))
#Time of March change to ESDT
DST_START = time.localtime(HHMarch)
print(DST_START)
HHNovember = time.mktime((year,11,(7-(int(5*year/4+1))%7),2,0,0,0,0,0))
#Time of November change to EST
DST_END = time.localtime(HHNovember)
print(DST_END)
blink_test.py
The LED variables are called from variables.py.
import time
from machine import Pin
import variables
# D53 (Arduino) = PG7 (MicroPython)
class Blynk:
print("Blink")
Red_LED = Pin(variables.D52, Pin.OUT)
Green_LED = Pin(variables.D53, Pin.OUT)
Red_LED.on()
time.sleep(1)
Red_LED.off()
time.sleep(1)
Green_LED.on()
time.sleep(1)
Green_LED.off()
time.sleep(1)
main.py
from time import sleep
from wifi import WIFI
from dst import DST
import ntptime, time, variables
from blink_test import Blynk
from i2c import *
devices_found = 0
def wifi_function_once(_has_run=[]):
a = WIFI()
if _has_run:
return
print('\n')
print("first time")
print("Connected to ",a.WIFI_NETWORK)
print(a.wlan)
wifi_ran = True
_has_run.append(1)
def I2C_function_once(_has_run=[]):
if _has_run:
for device in devices:
print("I2C hexadecimal address: ", hex(device))
print('\n')
return
i = I2CScanner()
print('\n')
print('I2C SCANNER')
devices = i.i2c.scan()
if len(devices) == 0:
print("No i2c device !")
else:
print('i2c devices found:', len(devices))
for device in devices:
print("I2C hexadecimal address: ", hex(device))
def blynk_function():
print("Blink")
Red_LED = Pin(variables.D52, Pin.OUT)
Green_LED = Pin(variables.D53, Pin.OUT)
Red_LED.on()
time.sleep(1)
Red_LED.off()
time.sleep(1)
Green_LED.on()
time.sleep(1)
Green_LED.off()
time.sleep(1)
return
def dst_function(_has_run=[]):
if _has_run:
return
d = DST()
print("DST Start: {:02d}/{:02d}/{:02d}".format(d.DST_START[1],d.DST_START[2],d.DST_START[0]))
print("DST END: {:02d}/{:02d}/{:02d}".format(d.DST_END[1],d.DST_END[2],d.DST_END[0]))
# Set RTC Clock properly
now=time.time()
if now < d.HHMarch : # we are before last sunday of march
EST_TIME = time.localtime(now-18000) # EST: UTC-5H is 5 * 36000
hour_number = EST_TIME[3]
if hour_number < 13:
hour_12 = hour_number
am_pm = 'am'
else:
hour_12 = hour_number - 12
am_pm = 'pm'
print("Today's Date: {:02d}/{:02d}/{:02d}".format(EST_TIME[1],EST_TIME[2],EST_TIME[0]))
print("Time: {:02d}:{:02d}:{:02d} {}".format(hour_12,EST_TIME[4],EST_TIME[5],am_pm))
elif now < d.HHNovember : # we are before last sunday of march
EST_TIME = time.localtime(now-14400) # EDST: UTC-4H 4 * 3600
hour_number = EST_TIME[3]
if hour_number < 13:
hour_12 = hour_number
am_pm = 'am'
else:
hour_12 = hour_number - 12
am_pm = 'pm'
print("Today's Date: {:02d}/{:02d}/{:04d}".format(EST_TIME[1],EST_TIME[2],EST_TIME[0]))
print("Time: {:02d}:{:02d}:{:02d} {}".format(hour_12,EST_TIME[4],EST_TIME[5],am_pm))
else :
EST_TIME = time.localtime(now-18000) # EST: UTC-5H is 5 * 3600
hour_number = EST_TIME[3]
if hour_number < 13:
hour_12 = hour_number
am_pm = 'am'
else:
hour_12 = hour_number - 12
am_pm = 'pm'
print("Today's Date: {:02d}/{:02d}/{:02d}".format(EST_TIME[1],EST_TIME[2],EST_TIME[0]))
print("Time: {:02d}:{:02d}:{:02d} {}".format(hour_12,EST_TIME[4],EST_TIME[5],am_pm))
if __name__=="__main__":
while True:
dst_function()
wifi_function_once()
I2C_function_once()
blynk_function()
sleep(3)
Output of main.py
DST Start: 03/10/2024 DST END: 11/03/2024 Today's Date: 04/14/2024 Time: 07:27:08 pm I2C SCANNER i2c devices found: 1 I2C hexadecimal address: 0x15 Blink