Skip to content

Instantly share code, notes, and snippets.

@mattfoster
Created February 21, 2016 14:28
Show Gist options
  • Select an option

  • Save mattfoster/d8960091b31795d89a90 to your computer and use it in GitHub Desktop.

Select an option

Save mattfoster/d8960091b31795d89a90 to your computer and use it in GitHub Desktop.

Revisions

  1. mattfoster renamed this gist Feb 21, 2016. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. mattfoster created this gist Feb 21, 2016.
    94 changes: 94 additions & 0 deletions init.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,94 @@
    -- Config
    SSID = "ssid_name"
    PASS = "ssid_pass"

    MQTT_TEMP_TOPIC = "/sensors/study/temperature"
    MQTT_HOST = "server IP"
    MQTT_PORT = 1883
    MQTT_CLIENT_ID = "esp2866_study"
    MQTT_USER = ""
    MQTT_PASS = ""
    MQTT_RECONNECT = 1
    MQTT_SECURE = 0

    -- TMP102 settings
    TMP102_ID = 0
    TMP102_SDA = 6
    TMP102_SCL = 7
    -- Allow correcting temperatures by subtracting this
    TMP102_BIAS = 0

    -- Number of seconds to wait for a wifi connection before restarting
    MAX_RETRIES = 20

    -- Measurement interval (ms)
    TEMP_INTERVAL = 10000

    function wifi_connect(ssid, pass)
    wifi.setmode(wifi.STATION)
    wifi.sta.config(ssid, pass)

    local wifi_count = 0

    tmr.alarm(0, 1000, 1, function()
    wifi_status = wifi.sta.status()
    if wifi_status ~= 5 then
    wifi_count = wifi_count + 1

    if wifi_count >= MAX_RETRIES then
    print("Failed to connect. Restarting")
    node.restart()
    end

    print("Not yet connected.")
    else
    ip, mask, gateway = wifi.sta.getip()
    print("Connected")
    print("IP address: ", ip)
    print("Netmask: ", mask)
    print("Gateway: ", gateway)
    tmr.stop(0)
    mqtt_setup()
    end
    end) -- end of alarm function
    end

    function mqtt_setup()
    local mqtt_connection = 0

    -- Connect to the MQTT broker
    mqtt = mqtt.Client(MQTT_CLIENT_ID, 120, MQTT_USER, MQTT_PASS)
    mqtt:connect(MQTT_HOST, MQTT_PORT, MQTT_SECURE, MQTT_RECONNECT)

    mqtt:on("connect", function(client)

    print("Connected to MQTT server")
    mqtt_connection = 1

    -- Load the TMP102 module
    tmp102=dofile("tmp102.lua")
    tmp102.begin(TMP102_ID, TMP102_SDA, TMP102_SCL)

    tmr.alarm(0, TEMP_INTERVAL, 1, function()
    temp=tmp102.celcius() - TMP102_BIAS
    print("Read temperature from TMP102: ", temp)
    mqtt:publish(MQTT_TEMP_TOPIC, temp, 0, 0)
    end)
    end)

    -- TODO: reconnection logic if auto-reconnect fails
    mqtt:on("offline", function(client)
    print("Lost connection to MQTT server")
    mqtt_connection = 0
    end)
    end

    function main()

    -- Connect to the network
    wifi_connect(SSID, PASS)

    end

    -- Run the main function
    main()