from time import sleep
import network
from umqtt.simple import MQTTClient
# ===== ThingSpeak MQTT settings =====
BROKER = "mqtt3.thingspeak.com"
PORT = 1883
CHANNEL_ID = "3293129"
TOPIC = "channels/{}/publish".format(CHANNEL_ID)
CLIENT_ID = "ORwNMAYKEg0kCiUsLxk4LSY"
USERNAME = "ORwNMAYKEg0kCiUsLxk4LSY"
PASSWORD = "oniySoxRWcSviO9bvemQbAE1"
CSV_FILE = "IoTSensorStream.csv"
def connect_wifi():
print("Connecting to WiFi...")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("Wokwi-GUEST", "")
while not wlan.isconnected():
sleep(1)
print(".", end="")
print("\nWiFi connected")
print(wlan.ifconfig())
return wlan
def connect_mqtt():
print("Connecting to MQTT broker...")
client = MQTTClient(
client_id=CLIENT_ID,
server=BROKER,
port=PORT,
user=USERNAME,
password=PASSWORD,
keepalive=60
)
client.connect()
print("MQTT connected")
return client
def parse_row(line):
parts = line.strip().split(",")
# expected:
# timestep,volt,rotate,pressure,vibration,label
if len(parts) < 5:
return None
try:
return {
"timestep": int(parts[0]),
"volt": float(parts[1]),
"rotate": float(parts[2]),
"pressure": float(parts[3]),
"vibration": float(parts[4]),
}
except:
return None
def build_payload(row):
return "field1={}&field2={}&field3={}&field4={}".format(
row["volt"],
row["rotate"],
row["pressure"],
row["vibration"]
)
def publish_csv_once(client):
print("Reading CSV file line by line...")
with open(CSV_FILE, "r") as f:
header = f.readline() # skip header
for line in f:
line = line.strip()
if not line:
continue
row = parse_row(line)
if row is None:
continue
payload = build_payload(row)
print("Sending data record...")
print("timestep =", row["timestep"])
print("payload =", payload)
try:
client.publish(TOPIC.encode(), payload.encode())
print("Publish success")
except Exception as e:
print("Publish failed:", e)
raise e
print("-------------------------")
gc.collect()
sleep(16)
def main():
connect_wifi()
client = connect_mqtt()
print("Sensor Node started")
while True:
try:
publish_csv_once(client)
print("End of CSV reached, restarting from beginning...")
gc.collect()
sleep(2)
except Exception as e:
print("Error:", e)
print("Reconnecting MQTT...")
try:
client.disconnect()
except:
pass
sleep(2)
client = connect_mqtt()
main()