title: raspberry pi led not defined error awsiot mqtt
body: <p>I'm trying to light up an led on raspberrypi via AWSIoT but I keep getting this error</p>
  
  <blockquote>
    <p>File "mypub.py", line 71, in <br>
    GPIO.output(led21,GPIO.HIGH)<br>
    Connection returned result: 0<br>
    NameError: name 'led21' is not defined  </p>
  </blockquote>
  
  <p>Can anyone help resolve this?</p>
  
  <p>I am playing around with MQTT, trying to light up LED-s and interact with other sensors eventually.</p>
  
  <p>I am using code I got from <a href="https://github.com/anujdutt9/AWS_IoT_Python" rel="nofollow noreferrer"><strong>here</strong></a> </p>
  
  <pre><code># 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()
  </code></pre>