Sofian Hadiwijaya

Programming is a creative activity.

Menghubungkan Intel Edison Ke Geeknesia via MQTT Python-Paho

| Comments

Hello Good People,

Pada postingan sebelumnya kita sudah membahas cara menghubungkan Intel Galileo ke Geeknesia dengan menggunakan nodejs. Kemudian minggu lalu saya juga menulis tentang dasar-dasar Python. Nah gimana menurut kalian bahasa Python sendiri?.

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.

Terminal
1
$ pip install wiring-x86

Mari kita tes untuk membuat blinky LED.

blink.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Import the time module enable sleeps between turning the led on and off.
import time

# 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.
from wiringx86 import GPIOEdison as GPIO

# Create a new instance of the GPIOEdison class.
# Setting debug=True gives information about the interaction with sysfs.
gpio = GPIO(debug=False)
pin = 7
state = gpio.HIGH

# Set pin 7 to be used as an output GPIO pin.
print 'Setting up pin %d' % pin
gpio.pinMode(pin, gpio.OUTPUT)


print 'Blinking pin %d now...' % pin
try:
    while(True):
        # Write a state to the pin. ON or OFF.
        gpio.digitalWrite(pin, state)

        # Toggle the state.
        state = gpio.LOW if state == gpio.HIGH else gpio.HIGH

        # Sleep for a while.
        time.sleep(0.5)

# When you get tired of seeing the led blinking kill the loop with Ctrl-C.
except KeyboardInterrupt:
    # 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 :

mqttClient.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from wiringx86 import GPIOEdison as GPIO
import paho.mqtt.client as paho, os, urlparse, time

gpio = GPIO(debug=False)
analogpin = 17
gpio.pinMode(analogpin, gpio.ANALOG_INPUT)
# Define event callbacks
def on_connect(mosq, obj, rc):
    print("rc: " + str(rc))

def on_message(mosq, obj, msg):
    print(msg.topic + " " + str(msg.qos) + " " + str(msg.payload))

def on_publish(mosq, obj, mid):
    print("mid: " + str(mid))

def on_subscribe(mosq, obj, mid, granted_qos):
    print("Subscribed: " + str(mid) + " " + str(granted_qos))

def on_log(mosq, obj, level, string):
    print(string)

mqttc = paho.Client()
# Assign event callbacks
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish
mqttc.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)

# Connect
mqttc.username_pw_set(url.username, url.password)
mqttc.connect(url.hostname, url.port)

# Start subscribe, with QoS level 0
mqttc.subscribe("hello/world", 0)

# Publish a message
mqttc.publish("iot/live", "DEVICE_ID")

# Continue the network loop, exit when an error occurs
rc = 0
while rc == 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.

Silakan berkreasi dengan dasar yang sudah ada.

Comments