Jump to: navigation, search

Mihini/mqtt

MQTT

This example demonstrates the ON/OFF of LED lights via GPIO's pin 17

Variables

local sched = require 'sched'
local mqtt   = require 'mqtt_library' //import MQTT Lib
local gpio = require 'gpio'
local log = require 'log'


local MQTT_BROKER       = 'iot.eclipse.org'  //sandbox broker hosted @Eclipse
local MQTT_PORT         = 1883               //Port number
local MQTT_LOG_NAME     = 'MQTT_LED'        

-- ---------------------------

local MQTT_LED_RECEIVE = "/MQTT/LED/"         //Topic that we subscribe for, to receive an event
local MQTT_LED_PUBLISH="/MQTT/PUBDATA/"       // topic that we publish in this example
local mqtt_client

Call back that will be called on a publish to a subscribed topic /MQTT/LED

 local function callback(topic, val)
   sched.wait(2)  //wait
    if( topic == '/MQTT/LED') then
        local val2 = gpio.configure(17,{direction="out", edge="both", activelow="0"})
        if(val=='on')then
          gpio.write(17,0)  
          mqtt_client:publish(MQTT_LED_PUBLISH, "Light's ON")
        elseif(val=='off') then
          gpio.write(17,1)
          mqtt_client:publish(MQTT_LED_PUBLISH, "Light's OFF")        -- publish data to a topic
   end
  end
end

Main Function

local function main()
   log(LOG_NAME, "INFO", "Application started")
  -- Connect to mqtt
    mqtt_client = mqtt.client.create(MQTT_BROKER, MQTT_PORT, callback)    --Create MQTT client
    log(LOG_NAME, "INFO", "MQTT Client is created")
     mqtt_client:connect(MQTT_LOG_NAME)                          --Connect to the server
     log(LOG_NAME, "INFO", "Connected to:" .. MQTT_LOG_NAME)
 sched.wait(2)
   mqtt_client:subscribe({MQTT_LED_RECEIVE})          --MQTT Subscribe to a topic
  while(true) do 
   -- print('INside main')
     mqtt_client:handler()           --MQTT handler continously calls sub and pub
 
    end--
  end
  sched.run(main)
  sched.loop()