I am working with the mqtt examples for uPython, i adapted the example given to do something different. My code is suppose to publish a simple message when light levels drops below a given threshold. but i get this error:
download ok exec(open('main.py').read(),globals()) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 43 SyntaxError: invalid syntax
below is my main.py
from machine import Pin, ADC from time import sleep ldr = ADC(0) def sub_cb(topic, msg): print((topic, msg)) if topic == b'notification' and msg == b'received': print('ESP received hello message') def connect_and_subscribe(): global client_id, mqtt_server, topic_sub client = MQTTClient(client_id, mqtt_server) client.set_callback(sub_cb) client.connect() client.subscribe(topic_sub) print('Connected to %s MQTT broker, subscribed to %s topic' % (mqtt_server, topic_sub)) return client def restart_and_reconnect(): print('Failed to connect to MQTT broker. Reconnecting...') time.sleep(10) machine.reset() try: client = connect_and_subscribe() except OSError as e: restart_and_reconnect() while True: ldrValue = ldr.read() print(ldrValue) sleep(0.1) if ldrValue >= 350 msg = b'laser0' client.publish(topic_pub, msg) last_message = time.time() counter += 1 except OSError as e: restart_and_reconnect()
Hello Joseph, what’s your line 43 in that script? Can you tell me the line and double-check the indentation. According to that error, it’s usually missing some spaces.
Did you double-check the spacing?
Unfortunately the forum doesn’t support MicroPython spacing, you should use pastebin.com to share properly formatted MicroPython scripts
Yes. I double checked that spacing. I made sure they’re all tabbed in two spaces. Nutbfor clarity purpose here’s the code on paste bin. https://pastebin.com/kcuRfR2A
The spacing does look right. However, line 43 is:
last_message = time.time()
What’s that line doing? I think you can delete it
Deleted that line. Didn’t fix the problem, and oh, the error is now line 41 which is
msg = b'laser
This is your problem at line 40, there’s a : missing after the if statement. it needs to be something like this:
You also had your indentation wrong (specially in the while true). It should now be fixed the indentation, but I’m not sure if it will work as expected, because I couldn’t try it.
I apologize for taking so long to get back to you, but I’ve been with an eye problem and I had to limit my access to screens (computer/smartphones).
Thanks for the reply Rui. I’ll test it and give feed back. btw, there’s s protective eye glass you can buy (if you do no already own one) that blocks the harmful uv light from your eyes.