1

I'm trying to light up an led on raspberrypi via AWSIoT but I keep getting this error

File "mypub.py", line 71, in
GPIO.output(led21,GPIO.HIGH)
Connection returned result: 0
NameError: name 'led21' is not defined

Can anyone help resolve this?

I am playing around with MQTT, trying to light up LED-s and interact with other sensors eventually.

I am using code I got from here

# Publishes the Data to AWS IoT

import os
import socket
import ssl
import paho.mqtt.client as mqtt   # Import the Paho-MQTT Client
from time import sleep            # Import sleep from time for delays
import RPi.GPIO as GPIO           # Import GPIO Library for Raspberry Pi

connection_flag = False           # Initialize the Connection Flag as False    

GPIO.setmode(GPIO.BCM)            # Set Mode of RPi Pins i.e Broadcom or Chipset

# Define LED
led = 21                          # Put LED Numbers

# Set Pin as Output
GPIO.setup( led, GPIO.OUT )       # Pin 21
GPIO.output(led, GPIO.LOW )       # Initialize LED's

def on_connect(client, userdata, flags, rc): # on_connect()-Event handler
    global connection_flag        # global to check if the Connection to AWS Cloud has been Made.
    connection_flag = True
    print( "Connection returned result: " + str( rc ) )

def on_message(client, userdata, msg):       # on_message()-Event handler
    print( msg.topic + " " + str( msg.payload ) )

mqttc = mqtt.Client()             # Initiate Paho-MQTT Client
mqttc.on_connect = on_connect     # .set on_connect Event handler
mqttc.on_message = on_message     # .set on_message

# Define the AWS Host Key  ; Thing Name defined in AWS IoT; Root Certificate Path; Certificate Path; Private Key Certificate Path  
awshost   = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
awsport   =  8883                 # AWS Port( Default: 8883 )
clientId  = "raspberrypi"         # Client ID
thingName = "raspberrypi"         # Thing Name defined in AWS IoT
caPath    = "root-CA.crt"         # Root Certificate Path
certPath  = "raspberrypi.cert.pem"     # Certificate Path
keyPath   = "raspberrypi.private.key"  # Private Key Certificate Path

# Configure network encryption and authentication options
# Enable SSL/TLS support
mqttc.tls_set(caPath, certfile=certPath, keyfile=keyPath, cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None)

mqttc.connect(awshost, awsport, keepalive=60) # Connect to AWS Host
mqttc.loop_start()

while True:
    if connection_flag == True:
        GPIO.output( led21, GPIO.HIGH )

        # Update LED Data on AWS IoT in Real Time
        # State tells the current and previous state of LED
        # Reported gives the timestamp
        jsonMessage = "{  \"state\": { \"reported\": { \"Led\": " + str(state) + "} } }"
        mqttc.publish( "$aws/things/raspberrypi/shadow/update",
                        jsonMessage,
                        qos = 1
                        )
        mqttc.publish( "LED: ",         # Publish the Data to AWS IOT and get it on Subscription
                        state,
                        qos = 1
                        )
        print( "LED: " + "%d" % state )
        sleep( 1.0 )

        GPIO.output( led21, GPIO.HIGH ) # Update LED Data on AWS IoT in Real Time
        jsonMessage = "{ \"state\": { \"reported\": { \"Led\": " + str(state) + "} } }"
        mqttc.publish( "$aws/things/raspberrypi/shadow/update",
                        jsonMessage,
                        qos = 1
                        )
        sleep( 1.0 )
        mqttc.publish( "LED: ",        # Publish the Data to AWS IOT and get it on Subscription
                        state,
                        qos = 1
                        )
        print( "LED: " + "%d" % state )
   else:
        print( "Waiting for Connection..." )

ser.close()
GPIO.cleanup()

1 Answer 1

2

Easy:

your initial setup associated a symbol led, not led21

...
# Define LED
# Put LED Numbers
led = 21

while the later parts of the code used a not defined symbol led21

GPIO.output( led21, GPIO.HIGH )

replace the names so as to become "coherent" and voilá ... :o)

Sign up to request clarification or add additional context in comments.

2 Comments

cheers mate, i'm blind as a bat, but after fixing that i got a new error NameError: name 'state' is not defined
Easy: define state = "not defined yet"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.