Last active
January 28, 2024 13:47
-
-
Save huggre/a3044e6094867fe04096e0c64dc60f3b to your computer and use it in GitHub Desktop.
Integrating physical devices with IOTA and Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Imports some Python Date/Time functions | |
import time | |
import datetime | |
# Imports GPIO library | |
import RPi.GPIO as GPIO | |
# Imports the PyOTA library | |
from iota import Iota | |
from iota import Address | |
# Setup O/I PIN's | |
LEDPIN=18 | |
GPIO.setmode(GPIO.BCM) | |
GPIO.setwarnings(False) | |
GPIO.setup(LEDPIN,GPIO.OUT) | |
GPIO.output(LEDPIN,GPIO.LOW) | |
# Function for checking address balance on the IOTA tangle. | |
def checkbalance(): | |
print("Checking balance") | |
gb_result = api.get_balances(address) | |
balance = gb_result['balances'] | |
return (balance[0]) | |
# URL to IOTA fullnode used when checking balance | |
iotaNode = "https://nodes.thetangle.org:443" | |
# Create an IOTA object | |
api = Iota(iotaNode, "") | |
# IOTA address to be checked for new light funds | |
# IOTA addresses can be created using the IOTA Wallet | |
address = [Address(b'NYZBHOVSMDWWABXSACAJTTWJOQRPVVAWLBSFQVSJSWWBJJLLSQKNZFC9XCRPQSVFQZPBJCJRANNPVMMEZQJRQSVVGZ')] | |
# Get current address balance at startup and use as baseline for measuring new funds being added. | |
currentbalance = checkbalance() | |
lastbalance = currentbalance | |
# Define some variables | |
lightbalance = 0 | |
balcheckcount = 0 | |
lightstatus = False | |
# Main loop that executes every 1 second | |
while True: | |
# Check for new funds and add to lightbalance when found. | |
if balcheckcount == 10: | |
currentbalance = checkbalance() | |
if currentbalance > lastbalance: | |
lightbalance = lightbalance + (currentbalance - lastbalance) | |
lastbalance = currentbalance | |
balcheckcount = 0 | |
# Manage light balance and light ON/OFF | |
if lightbalance > 0: | |
if lightstatus == False: | |
print("light ON") | |
GPIO.output(LEDPIN,GPIO.HIGH) | |
lightstatus=True | |
lightbalance = lightbalance -1 | |
else: | |
if lightstatus == True: | |
print("light OFF") | |
GPIO.output(LEDPIN,GPIO.LOW) | |
lightstatus=False | |
# Print remaining light balance | |
print(datetime.timedelta(seconds=lightbalance)) | |
# Increase balance check counter | |
balcheckcount = balcheckcount +1 | |
# Pause for 1 sec. | |
time.sleep(1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is great! I came from a reddit post showing your medium article. I would love to try this on my Pi if that would be okay!