ESP8266 schickt Temperatur an SHC

  • RE: ESP8266 schickt Temperatur an SHC

    Hallo

    Hab nochmal neu aufgesetzt mit der init.lua vom DS18 und mit den oben genannten dht22.lua und shcdht22.lua.

    in der serial consolle steht:

    Source Code

    1. Y…O;ž’e‡þOAE’e†ü$Ž
    2. PORT OPEN 9600
    3. FILE="dht22.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    4. > ESP_Receiver=function(rcvBuf) if string.match(rcvBuf,"^ESP_cmd_close")==nil then file.write(string.gsub(rcvBuf, '\r', '')) uart.write(0, "> ") else uart.on("data")
    5. >> file.flush() file.close() FILE=nil rcvBuf=nil ESP_Receiver=nil uart.setup(0,9600,8,0,1,1) str="\r\n--Done--\r\n> " print(str) str=nil collectgarbage() end end uart.on("data",'\r',ESP_Receiver,0)-- ***************************************************************************
    6. -- DHT22 module for ESP8266 with nodeMCU
    7. --
    8. -- Written by Javier Yanez
    9. --stdin:2: unexpected symbol near '*'
    10. >  but based on a script of Pigs Fly from ESP8266.com forum
    11. --
    12. -- MIT license, http://opensource.org/licenses/MIT
    13. -- ***************************************************************************
    14. local moduleName = ...
    15. local M = {}
    16. _G[moduleName] = M
    17. local humidity
    18. local temperature
    19. function M.read(pin)
    20.  local checksum
    21.  local checksumTest
    22.  humidity = 0
    23.  temperature = 0
    24.  checksum = 0
    25.  -- Use Markus Gritsch trick to speed up read/write on GPIO
    26.  local gpio_read = gpio.read
    27.  
    28.  local bitStream = {}
    29.  for j = 1, 40, 1 do
    30.    bitStream[j] = 0
    31.  end
    32.  local bitlength = 0
    33.  -- Step 1:  send out start s
    34. stdin:1: '<eof>' expected near 'end'
    35. > ignal to DHT22
    36.  gpio.mode(pin, gpio.OUTPUT)
    37.  gpio.write(pin, gpio.HIGH)
    38.  tmr.delay(150stdin:1: '=' expected near 'to'
    39. > )
    40.  gpio.write(pin, gpio.LOW)
    41.  --tmr.delay(20000)
    42.  tmr.delay(40)
    43.  --delayMicroseconds(40)
    44.  --gpio.write(pin, gpio.HIGH)
    45.  gpio.mode(pin, gpio.INPUT)
    46.  -- Step 2:  DHT22 send response signal
    47.  -- bus will always let up eventually, don't bother with timeout
    48.  while (gpio_read(pin) == 0 ) do end
    49.  local c=0
    50.  while (gpio_read(pin) == 1 and c < 500) do c = c + 1 end
    51.  -- bus will always let up eventually, don't bo
    52. stdin:1: attempt to call global 'gpio_read' (a nil value)
    53. > ther with timeout
    54.  while (gpio_read(pin) == 0 ) do end
    55.  c=0
    56.  while (gpio_read(pin) == 1 astdin:1: '=' expected near 'with'
    57. > nd c < 500) do c = c + 1 end
    58.  
    59.  -- Step 3: DHT22 send data
    60.  for j = 1, 40, 1 do
    61.    while (gpio_read(pin) == 1 and bitlength < 10 ) do
    62.      bitlength = bitlen
    63. stdin:1: '=' expected near 'c'
    64. > gth + 1
    65.    end
    66.    bitStream[j] = bitlength
    67.    bitlength = 0
    68.    -- bus will always let up eventually, don't bother with timeout
    69.    while (gpio_read(pin) == 0) do end
    70.  end
    71.  --DHT data acquired, process.
    72.  for i = 1, 16, 1 do
    73.    if (bitStream[i] > 4) then
    74.      humidity = humidity + 2 ^ (16 - i)
    75.    end
    76.  end
    77.  for i = 1, 16, 1 do
    78.    if (bitStream[i + 16] > 4) then
    79.      temperature = temperature + 2 ^ (16 - i)
    80.    end
    81.  end
    82.  for i = 1, 8, 1 do
    83.    if (bitStream[i + 32] > 4) then
    84.      checksum = checksum + 2 ^ (8 - i)
    85.    end
    86.  end
    87.  checksumTest = (bit.band(humidity, 0xFF) + bit.rshift(humidity, 8) + bit.band(temperature, 0xFF) + bit.rshift(temperature, 8))
    88.  checksumTest = bit.band(checksumTest, 0xFF)
    89.  if temperature > 0x8000 then
    90.    -- convert to negative format
    91.    temperature = -(temperature - 0x8000)
    92.  end
    93.  -- conditions compatible con float point and integer
    94.  if (checksumTest - checksum >= 1) or (checksum - checksumTest >= 1) then
    95.    humidity = nil
    96.  end
    97.  --Per DHT Arduino Lib
    98.  gpio.mode(pin, gpio.OUTPUT)
    99.  gpio.write(pin, gpio.HIGH)
    100. end
    101. function M.getTemperature()
    102.  return temperature
    103. end
    104. function M.getHumidity()
    105.  return humidity
    106. end
    107. return M
    108. ESP_cmd_close
    109. stdin:1: ')' expected near ','
    110. >
    111. >
    112. > FILE="shcdht22.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    113. > > > >> > > > > > > > > >
    114. --Done--
    115. >
    116. >
    117. > FILE="init.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    118. > > > >> > > > >
    119. --Done--
    120. >
    121. >
    122. > dofile("init.lua")
    123. 192.168.178.45 255.255.255.0 192.168.178.1
    124. > ESP8266 mode is: 1
    125. The module MAC address is: 1A-FE-34-A2-45-92
    126. Config done, IP is 192.168.178.45
    127. PANIC: unprotected error in call to Lua API (cannot open ds18b20.ü0‚~–4û!‹Y…O;ž’e‡þOAE’e†ü$Ž
    Display All

    [hr]
    Habe einen Fehler in der init.lua gefunden,
    in der Zeile 15 stand "dofile ("ds18b20.lua").
    habe ich umbenannt in ("dht22.lua").
    Vorher wurde nichts gesendet vom ESP, jetzt ja (blaue Led blinkt rythmisch).
    Aber in SHC kommt nichts an.

    In der Serial consoll sieht es jetzt so aus:

    Source Code

    1. PORT OPEN 9600
    2. FILE="dht22.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    3. > > > >> > > > > > > > > > > > >
    4. --Done--
    5. >
    6. >
    7. > FILE="shcdht22.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    8. > > > >> > > > > > > > > >
    9. --Done--
    10. >
    11. >
    12. > FILE="init.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    13. > > > >> > > > >
    14. --Done--
    15. >
    16. >
    17. > 0‚~–4û!‹Y…O;ž’e‡þOAE’e†ü$Ž
    18. PORT OPEN 9600
    19. ESP8266 mode is: 1
    20. The module MAC address is: 1A-FE-34-A2-45-92
    21. Config done, IP is 192.168.178.45
    22. PANIC: unprotected error in call to Lua API (dht22.lua:12: table index is nil)
    23. PANIC: unprotected error in call to Lua API (table index is nil)
    24. ü!¤<1ä)]ô1H)}†Êè
    Display All


    jetzige init.lua:

    Source Code

    1. --init.lua
    2. wifi.setmode(wifi.STATION)
    3. wifi.sta.config("FritzRepeater2","93728348")
    4. wifi.sta.setip({ip="192.168.178.45",netmask="255.255.255.0",gateway="192.168.178.1"})
    5. print(wifi.sta.getip())
    6. wifi.sta.connect()
    7. tmr.alarm(1, 10000, 1, function()
    8. if wifi.sta.getip()== nil then
    9. print("IP unavaiable, Waiting...")
    10. else
    11. tmr.stop(1)
    12. print("ESP8266 mode is: " .. wifi.getmode())
    13. print("The module MAC address is: " .. wifi.ap.getmac())
    14. print("Config done, IP is "..wifi.sta.getip())
    15. dofile ("dht22.lua")
    16. end
    17. end)
    Display All
    Kann besser Hardware als Software !

    The post was edited 1 time, last by premo ().

  • RE: ESP8266 schickt Temperatur an SHC

    Hey

    ist ja irgendwie klar, das es nichts an SHC sendet


    in deiner init.lua

    verbindest du dich nur mit wlan und ruft dann dht22.lua auf

    wenn das die dht22.lua ist die du oben in deinen post gepostet hast fürst du nur die lib aus diese macht nix da du dort keine funktionen aufrufst dise stellt nur die funktionen zu verfügung um die daten vom DHT auszulessen

    du must jetzt die Temp und Feuchte auslesen und dann an SHC senden z.b. so:

    [code=php]
    PIN = 4 -- pin an den der DHT22 angeschlossen ist
    dht22 = require("dht22")
    dht22.read(PIN)
    t = dht22.getTemperature()
    h = dht22.getHumidity()

    print("Daten von DHT22:" ..t.. "\n" ..h.. "\n")
    -- t = temp h = feuchte jetzt kannst du die daten an SHC senden z.b. mit:
    conn=net.createConnection(net.TCP, 0)
    conn:on("receive", function(conn, payload) print(payload) end)
    -- senden an shc
    conn:connect(80,"192.168.0.15") -- ip anpassen auf die SHC ip
    conn:send("GET /shc/index.php?app=shc&a&ajax=pushsensorvalues&spid=10&sid=88&type=2&v1=" ..t.. "&v2=" ..h.. " HTTP/1.1\r\n")
    conn:send("Host: 192.168.0.15\r\n") -- ip anpassen
    conn:send("Accept: */*\r\n")
    conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n")
    conn:send("\r\n")
    conn:on("sent",function(conn)
    conn:close()
    end)
    conn:on("disconnection", function(conn)

    end)

    end

    [/php]

    diesen code anstelle "dofile("dht22.lua")" einfügen und er sollte was senden evtl

    empfiehtl sich noch die Var t und h zu formatieren!

    The post was edited 1 time, last by gMaN ().

  • RE: ESP8266 schickt Temperatur an SHC

    Klappt nicht, als Laie garnicht einfach.
    Diese 3 Lua habe ich genommen.

    dht22.lua:

    Source Code

    1. -- ***************************************************************************
    2. -- DHT22 module for ESP8266 with nodeMCU
    3. --
    4. -- Written by Javier Yanez
    5. -- but based on a script of Pigs Fly from ESP8266.com forum
    6. --
    7. -- MIT license, http://opensource.org/licenses/MIT
    8. -- ***************************************************************************
    9. local moduleName = ...
    10. local M = {}
    11. _G[moduleName] = M
    12. local humidity
    13. local temperature
    14. function M.read(pin)
    15.  local checksum
    16.  local checksumTest
    17.  humidity = 0
    18.  temperature = 0
    19.  checksum = 0
    20.  -- Use Markus Gritsch trick to speed up read/write on GPIO
    21.  local gpio_read = gpio.read
    22.  
    23.  local bitStream = {}
    24.  for j = 1, 40, 1 do
    25.    bitStream[j] = 0
    26.  end
    27.  local bitlength = 0
    28.  -- Step 1:  send out start signal to DHT22
    29.  gpio.mode(pin, gpio.OUTPUT)
    30.  gpio.write(pin, gpio.HIGH)
    31.  tmr.delay(150)
    32.  gpio.write(pin, gpio.LOW)
    33.  --tmr.delay(20000)
    34.  tmr.delay(40)
    35.  --delayMicroseconds(40)
    36.  --gpio.write(pin, gpio.HIGH)
    37.  gpio.mode(pin, gpio.INPUT)
    38.  -- Step 2:  DHT22 send response signal
    39.  -- bus will always let up eventually, don't bother with timeout
    40.  while (gpio_read(pin) == 0 ) do end
    41.  local c=0
    42.  while (gpio_read(pin) == 1 and c < 500) do c = c + 1 end
    43.  -- bus will always let up eventually, don't bother with timeout
    44.  while (gpio_read(pin) == 0 ) do end
    45.  c=0
    46.  while (gpio_read(pin) == 1 and c < 500) do c = c + 1 end
    47.  
    48.  -- Step 3: DHT22 send data
    49.  for j = 1, 40, 1 do
    50.    while (gpio_read(pin) == 1 and bitlength < 10 ) do
    51.      bitlength = bitlength + 1
    52.    end
    53.    bitStream[j] = bitlength
    54.    bitlength = 0
    55.    -- bus will always let up eventually, don't bother with timeout
    56.    while (gpio_read(pin) == 0) do end
    57.  end
    58.  --DHT data acquired, process.
    59.  for i = 1, 16, 1 do
    60.    if (bitStream[i] > 4) then
    61.      humidity = humidity + 2 ^ (16 - i)
    62.    end
    63.  end
    64.  for i = 1, 16, 1 do
    65.    if (bitStream[i + 16] > 4) then
    66.      temperature = temperature + 2 ^ (16 - i)
    67.    end
    68.  end
    69.  for i = 1, 8, 1 do
    70.    if (bitStream[i + 32] > 4) then
    71.      checksum = checksum + 2 ^ (8 - i)
    72.    end
    73.  end
    74.  checksumTest = (bit.band(humidity, 0xFF) + bit.rshift(humidity, 8) + bit.band(temperature, 0xFF) + bit.rshift(temperature, 8))
    75.  checksumTest = bit.band(checksumTest, 0xFF)
    76.  if temperature > 0x8000 then
    77.    -- convert to negative format
    78.    temperature = -(temperature - 0x8000)
    79.  end
    80.  -- conditions compatible con float point and integer
    81.  if (checksumTest - checksum >= 1) or (checksum - checksumTest >= 1) then
    82.    humidity = nil
    83.  end
    84.  --Per DHT Arduino Lib
    85.  gpio.mode(pin, gpio.OUTPUT)
    86.  gpio.write(pin, gpio.HIGH)
    87. end
    88. function M.getTemperature()
    89.  return temperature
    90. end
    91. function M.getHumidity()
    92.  return humidity
    93. end
    Display All


    shcdht222.lua:

    Brainfuck Source Code

    1. --------------------------------------
    2. -- DS18B20 Temperatur Webserver mit statischer IP und Auto-Refresh
    3. --------------------------------------
    4. -- Quellen
    5. --   github.com/nodemcu/nodemcu-firmware#connect-to-your-ap
    6. --   github.com/nodemcu/nodemcu-firmware#or-a-simple-http-server
    7. --   github.com/nodemcu/nodemcu-firmware/tree/master/lua_modules/ds18b20
    8. --------------------------------------
    9. print("DHT22 v.0.1")
    10. function read_temp()
    11. PIN = 4 --  data pin, GPIO0
    12. dht22 = require("dht22")
    13. dht22.read(PIN)
    14. t = dht22.getTemperature()
    15. h = dht22.getHumidity()
    16. if h == nil then
    17. print("Error reading from DHT22")
    18. else
    19. t1 = string.sub(t,1,2)
    20. t2 = string.sub(t,3,4)
    21. h1 = string.sub(h,1,2)
    22. h2 = string.sub(h,3,4)
    23. if t2 == nil then
    24. t2 = 0
    25. elseif h2 == nil then
    26. h2 = 0
    27. end
    28. print ("t:" ..t1.. "." .. t2.. "\nh:" ..h1.. "." ..h2.. "\n")
    29. return t1,t2,h1,h2
    30. end
    31. -- release module
    32. dht22 = nil
    33. package.loaded["dht22"]=nil
    34. end
    35. end)
    Display All


    init.lua:

    Source Code

    1. --init.lua
    2. wifi.setmode(wifi.STATION)
    3. wifi.sta.config("FritzRepeater2","93728348")
    4. wifi.sta.setip({ip="192.168.178.45",netmask="255.255.255.0",gateway="192.168.178.1"})
    5. print(wifi.sta.getip())
    6. wifi.sta.connect()
    7. tmr.alarm(1, 10000, 1, function()
    8. if wifi.sta.getip()== nil then
    9. print("IP unavaiable, Waiting...")
    10. else
    11. tmr.stop(1)
    12. print("ESP8266 mode is: " .. wifi.getmode())
    13. print("The module MAC address is: " .. wifi.ap.getmac())
    14. print("Config done, IP is "..wifi.sta.getip())
    15. PIN = 4 --  pin an den der DHT22 angeschlossen ist
    16. dht22 = require("dht22")
    17. dht22.read(PIN)
    18. t = dht22.getTemperature()
    19. h = dht22.getHumidity()
    20. print("Daten von DHT22:" ..t.. "\n" ..h.. "\n")
    21. -- t = temp h = feuchte jetzt kannst du die daten an SHC senden z.b. mit:
    22. conn=net.createConnection(net.TCP, 0)
    23. conn:on("receive", function(conn, payload) print(payload) end)
    24. -- senden an shc
    25. conn:connect(80,"192.168.178.38") -- ip anpassen auf die SHC ip
    26. conn:send("GET /shc/index.php?app=shc&a&ajax=pushsensorvalues&spid=10&sid=88&type=2&v1=" ..t.. "&v2=" ..h.. " HTTP/1.1\r\n")
    27. conn:send("Host: 192.168.178.38\r\n")  -- ip anpassen
    28. conn:send("Accept: */*\r\n")
    29. conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n")
    30. conn:send("\r\n")
    31. conn:on("sent",function(conn)
    32.                      conn:close()                    
    33.                  end)
    34. conn:on("disconnection", function(conn)
    35. end)
    Display All
    Kann besser Hardware als Software !
  • RE: ESP8266 schickt Temperatur an SHC

    Hallo
    Mit den aufgesetzten .lua wird nichts gesendet.
    Die blaue Led bleibt dunkel.

    Die Debug Ausgabe sieht so aus

    Source Code

    1. ORT OPEN 9600
    2. FILE="dht22.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    3. > > > > >> > > > > > > > > > > > >
    4. --Done--
    5. >
    6. >
    7. > FILE="shcdht222.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    8. > >> > > > > >
    9. --Done--
    10. >
    11. >
    12. > dofile("shcdht222.lua")
    13. shcdht222.lua:39: '<eof>' expected near 'end'
    14. > FILE="init.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    15. > >> > > > > > > >
    16. --Done--
    17. >
    18. >
    19. > dofile("init.lua")
    20. init.lua:38: 'end' expected (to close 'if' at line 8) near '<eof>'
    21. >
    Display All
    Kann besser Hardware als Software !

    The post was edited 1 time, last by premo ().

  • RE: ESP8266 schickt Temperatur an SHC

    Skype und sonstiges habe ich leider nicht.
    Habe jetzt noch mal in der init.lua
    vor dem end) ein "end" gesetzt.
    Gesendet wird leider immer noch nichts
    (blaue Led ist stumm)

    die serial console sind schonmal besser aus:

    Source Code

    1. PORT OPEN 9600
    2. file.format()
    3. > 0‚~–4û!‹Y…O;ž’e‡þOAE’e†ü$Ž
    4. PORT OPEN 9600
    5. FILE="dht22.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    6. > >> > > > > > > > > > > > >
    7. --Done--
    8. >
    9. >
    10. > FILE="shcdht222.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    11. > >> > > > > >
    12. --Done--
    13. >
    14. >
    15. > FILE="init.lua" file.remove(FILE) file.open(FILE,"w+") uart.setup(0,9600,8,0,1,0)
    16. > >> > > > > > > >
    17. --Done--
    18. >
    Display All
    Kann besser Hardware als Software !
  • RE: ESP8266 schickt Temperatur an SHC

    Habe nochmal mit
    "nodemcu_float_0.9.6-dev_20150704"
    und den .lua`s getestet, es bleibt so.
    Es erscheint kein
    "NodeMCU 0.9.5 build 20150318 powered by Lua 5.1.4" .
    An der dht22.lua kann es ja nicht liegen,
    sind wohl Fehler in den beiden anderen .lua`s.

    Die DS18 habe ich erfolgreich am laufen.
    Vieleicht gibt es ja irgendwann fertige .lua.
    Kann besser Hardware als Software !
  • RE: ESP8266 schickt Temperatur an SHC

    premo wrote:


    Habe nochmal mit
    "nodemcu_float_0.9.6-dev_20150704"
    und den .lua`s getestet, es bleibt so.
    Es erscheint kein
    "NodeMCU 0.9.5 build 20150318 powered by Lua 5.1.4" .


    Einer von meinen 5 ESPs zeigt ähnliche Symptome. Das Flashen funktioniert ohne Fehler, aber danach kommen entweder wirre Sonderzeichen oder gar nichts. Die anderen 4 funktionieren einwandfrei.
    Nach etwas Recherche im Internet ist es wohl der verbaute Flash, der rumspinnen kann. Ich hab überlegt, ob ich den mal ersetze, aber bei dem Preis ist es wohl sinnvoller, bei der nächsten Bestellung noch ein paar ESPs mit zu ordern.

    Zum Thema DHT:

    Ist auch gerade mein Plan. Nach ewigem Probieren und Problemen mit "not enough memory" beim Laden der dht.lua bin ich hier drübergestolpert: Link
    Laut Vowstar ist in den Development-Releases der Support für DHT schon fest in die Firmware eingebaut.
    Hab ich grad mal geflasht und getestet, funktioniert einwandfrei :)
  • RE: ESP8266 schickt Temperatur an SHC

    gMaN wrote:


    zum fehler not enought memory einfach im ESPlorer auf die datei die aufm chip ist rechts klickt und ein "Compile ..." ausführen damit ist das problem dann behoben


    Hat bei mir nicht funktioniert. Compilieren wandelt ja nur die LUA Scripte zu Bytecode und das Problem ist ja nicht die Größe der Dateien, sondern der RAM.

    premo wrote:


    Kann ich einen ESP mit dem Esplorer auch auslesen,
    z.b. welche .lua's drauf sind und Firmware.


    Die Firmwareversion siehst du nur beim Booten und nur, wenn die Firmware auch ordentlich läuft.
    Die Dateien siehst du am rechten Rand, unter Format, FS Info und Reload. Wenn nicht, mit Reload die Ansicht aktualisieren.
  • RE: ESP8266 schickt Temperatur an SHC

    gMaN wrote:


    Hast du dann auch die luas gelöscht ?


    Ja, aber das Problem war ja nicht die Dateigröße, bei mir waren nur noch knapp 7kB Heap frei, nachdem die Scripte geladen waren.
    Aber wie schon geschrieben, das Problem hat sich mit der Development-Firmware erledigt. Ich kann jetzt DHT und DS18b20 auslesen, ohne extra Scripte, und hab fast 25kB RAM frei :)