Sekarang kita akan mempelajari bagaimana menghubungkan Intel Edison board penerus dari Intel Galileo, bentuknya lebih kecil dan sudah dilengkapi dengan wifi dan bluetooth.
Sebelum kita menghubungkan Intel Edison ke geeknesia, kita akan mempelajari terlebih dahulu bagaimana cara mengkontrol GPIO dari Arduino breakout yang dibuat khusus untuk Intel Edison. Untuk mengkontrol GPIO pada Intel Board telah tersedia module opensource yaitu Wiring-x86.
# Import the time module enable sleeps between turning the led on and off.importtime# Import the GPIOEdison class from the wiringx86 module.# In case you want to use a different board, simply the import right class# below. The API is unified for all supported boards.fromwiringx86importGPIOEdisonasGPIO# Create a new instance of the GPIOEdison class.# Setting debug=True gives information about the interaction with sysfs.gpio=GPIO(debug=False)pin=7state=gpio.HIGH# Set pin 7 to be used as an output GPIO pin.print'Setting up pin %d'%pingpio.pinMode(pin,gpio.OUTPUT)print'Blinking pin %d now...'%pintry:while(True):# Write a state to the pin. ON or OFF.gpio.digitalWrite(pin,state)# Toggle the state.state=gpio.LOWifstate==gpio.HIGHelsegpio.HIGH# Sleep for a while.time.sleep(0.5)# When you get tired of seeing the led blinking kill the loop with Ctrl-C.exceptKeyboardInterrupt:# Leave the led turned off.print'\nCleaning up...'gpio.digitalWrite(pin,gpio.LOW)# Do a general cleanup. Calling this function is not mandatory.gpio.cleanup()
simpan dengan nama file blink.py , mari kita execute filenya.
Terminal
1
$ python blink.py
Hore!!! LED-nya kedap-kedip.
Setelah kita bisa mengkontrol GPIO dari Intel Edison sekarang saatnya kita menginstall package untuk MQTT Client. Salah satu module yang hits sekarang yaitu Paho-MQTT.
Terminal
1
$ pip install paho-mqtt
Selanjutnya, berikut kode dasar menggunakan paho-mqtt untuk berkomunikasi dengan Geeknesia :
fromwiringx86importGPIOEdisonasGPIOimportpaho.mqtt.clientaspaho,os,urlparse,timegpio=GPIO(debug=False)analogpin=17gpio.pinMode(analogpin,gpio.ANALOG_INPUT)# Define event callbacksdefon_connect(mosq,obj,rc):print("rc: "+str(rc))defon_message(mosq,obj,msg):print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload))defon_publish(mosq,obj,mid):print("mid: "+str(mid))defon_subscribe(mosq,obj,mid,granted_qos):print("Subscribed: "+str(mid)+" "+str(granted_qos))defon_log(mosq,obj,level,string):print(string)mqttc=paho.Client()# Assign event callbacksmqttc.on_message=on_messagemqttc.on_connect=on_connectmqttc.on_publish=on_publishmqttc.on_subscribe=on_subscribe# Uncomment to enable debug messages#mqttc.on_log = on_log# Parse CLOUDMQTT_URL (or fallback to localhost)url_str=os.environ.get('CLOUDMQTT_URL','mqtt://USERNAME:PASSWORD@geeknesia.com:1883')url=urlparse.urlparse(url_str)# Connectmqttc.username_pw_set(url.username,url.password)mqttc.connect(url.hostname,url.port)# Start subscribe, with QoS level 0mqttc.subscribe("hello/world",0)# Publish a messagemqttc.publish("iot/live","DEVICE_ID")# Continue the network loop, exit when an error occursrc=0whilerc==0:rc=mqttc.loop()value=gpio.analogRead(analogpin)mqttc.publish("iot/data",'{"code":"USERNAME:PASSWORD","attributes":{"LDR":"'+`value`+'"}}')time.sleep(60)print("rc: "+str(rc))
Analog Input pada module Wiring-x86 mulai dari pin 17-19. Jadi A0 = 17 , dan seterusnya. Untuk saat ini saya menggunakan A03 sebagai Analog Input. Dengan demikian saya menggunakan pin 17.
Jangan lupa ganti DEVICE_ID, USERNAME, dan PASSWORD , sesuai dengan informasi detail dari device yang Anda daftarkan pada Geeknesia.
Mari kita execute script Python kita
Terminal
1
$ python mqttClient.py
Intel Edison akan selalu mengirimkan data dari sensor LDR ke Geeknesia dengan interval 60 detik.
Semua source saya upload ke Github dengan nama repo python-mqtt-geeknesia.