Tous les capteurs reliés au RPI par Wifi avec module ESP8266
Modérateur : Francois
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonjour à tous,
petit nouveau sur le forum, je suis l’heureux possesseur de 2 RPI: Un comme médiacenter, et l'autre pour un "projet" de domotique dans ma maison. Ayant découvert il y a peu, l'existence de ce petit objet qu'est l'ESP, je me suis dit que c'était exactement ce qu'il me fallait pour barder ma maison de capteurs, sans fils et à pas cher... (suffit de voir le prix des modules enocean)... Je m'en suis donc procuré un sur la bay et c'est là que les ennui (pour moi commencent)... Je n'ai rien trouvé de mieux que d'acheter un module "pas simple" pour débuter: http://smarpl.com/content/esp8266-esp-2 ... mpressions
Je me suis dit que plein de GPIO ce serait cool... sauf que, après l'avoir reçu, je me suis rendu compte que c'était un brin compliqué, pour un noob comme moi, pour démarrer.
Comme beaucoup de monde, j'ai voulu commencer par quelque chose de "simple" pour me faire les dents, à savoir brancher une DS18B20 dessus et envoyer les données sur Thinkspeak.com. Pour ce faire, il y a plein de tuto sur instuctables.com... Donc après l'avoir flashé (non sans mal) avec NodeMcu 0.9.6, transférer des scripts piochés sur le net, j'arrive à me connecter sur mon wifi local, envoyer en manuel des données sur mon channel thinkspeak... Le seul hic, c'est les données températures du capteur que je n'arrive pas à relever... j'ai systématiquement une donnée farfelue : Temp:-1.0999 C qui apparait sur mon terminal (Lualoader)... cela me fait penser à un mauvais adressage dans mon script.
J'ai parcouru l'ensemble de ce post pour tenter d'y voire plus clair, d'autres sur des sites anglais (qui n'est pas mon fort) mais rien à faire, je bloque dessus depuis une semaine.
Je me tourne donc vers vous, et plus particulièrement SMB38 qui à l'air de maitriser ce langage pour m'aider à débloquer la situation.
Concernant l'ESP, de ce que j'ai compris, possède 10 GPIO (numériques????), d'après la dernière nomenclature de NodeMCU, le GPIO 14 correspond à la broche 5, mon script est donc le suivant (le début):
"-- Measure temperature and post data to thingspeak.com
-- 2014 OK1CDJ
--- Tem sensor DS18B20 is connected to GPIO14
--- 2015.01.21 sza2 temperature value concatenation bug correction
pin = 5
ow.setup(pin)
counter=0
lasttemp=-999
...."
Au besoin, je peux envoyer le script complet
Merci à vous de votre aide
PS: Mon DS18B20 est validé (par moi même) sur un arduino
petit nouveau sur le forum, je suis l’heureux possesseur de 2 RPI: Un comme médiacenter, et l'autre pour un "projet" de domotique dans ma maison. Ayant découvert il y a peu, l'existence de ce petit objet qu'est l'ESP, je me suis dit que c'était exactement ce qu'il me fallait pour barder ma maison de capteurs, sans fils et à pas cher... (suffit de voir le prix des modules enocean)... Je m'en suis donc procuré un sur la bay et c'est là que les ennui (pour moi commencent)... Je n'ai rien trouvé de mieux que d'acheter un module "pas simple" pour débuter: http://smarpl.com/content/esp8266-esp-2 ... mpressions
Je me suis dit que plein de GPIO ce serait cool... sauf que, après l'avoir reçu, je me suis rendu compte que c'était un brin compliqué, pour un noob comme moi, pour démarrer.
Comme beaucoup de monde, j'ai voulu commencer par quelque chose de "simple" pour me faire les dents, à savoir brancher une DS18B20 dessus et envoyer les données sur Thinkspeak.com. Pour ce faire, il y a plein de tuto sur instuctables.com... Donc après l'avoir flashé (non sans mal) avec NodeMcu 0.9.6, transférer des scripts piochés sur le net, j'arrive à me connecter sur mon wifi local, envoyer en manuel des données sur mon channel thinkspeak... Le seul hic, c'est les données températures du capteur que je n'arrive pas à relever... j'ai systématiquement une donnée farfelue : Temp:-1.0999 C qui apparait sur mon terminal (Lualoader)... cela me fait penser à un mauvais adressage dans mon script.
J'ai parcouru l'ensemble de ce post pour tenter d'y voire plus clair, d'autres sur des sites anglais (qui n'est pas mon fort) mais rien à faire, je bloque dessus depuis une semaine.
Je me tourne donc vers vous, et plus particulièrement SMB38 qui à l'air de maitriser ce langage pour m'aider à débloquer la situation.
Concernant l'ESP, de ce que j'ai compris, possède 10 GPIO (numériques????), d'après la dernière nomenclature de NodeMCU, le GPIO 14 correspond à la broche 5, mon script est donc le suivant (le début):
"-- Measure temperature and post data to thingspeak.com
-- 2014 OK1CDJ
--- Tem sensor DS18B20 is connected to GPIO14
--- 2015.01.21 sza2 temperature value concatenation bug correction
pin = 5
ow.setup(pin)
counter=0
lasttemp=-999
...."
Au besoin, je peux envoyer le script complet
Merci à vous de votre aide
PS: Mon DS18B20 est validé (par moi même) sur un arduino
- Jean-Marie
- Raspinaute
- Messages : 240
- Enregistré le : sam. 24 janv. 2015 18:01
- Localisation : Arlon, Belgique
- Contact :
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello Fidoboulettes
Pour LUA, je ne peux guère t'aider.
Par contre, il y a des années, j'ai cherché pas mal de temps à faire fonctionner une sonde DS18B20, jusqu'à ce que je me rende compte que j'avais oublié la résistance de pull-up de 4,7k.
Malheureusement, il semble que ce ne soit pas cela puisque ta sonde fonctionne bien avec Arduino.
Pour LUA, je ne peux guère t'aider.
Par contre, il y a des années, j'ai cherché pas mal de temps à faire fonctionner une sonde DS18B20, jusqu'à ce que je me rende compte que j'avais oublié la résistance de pull-up de 4,7k.
Malheureusement, il semble que ce ne soit pas cela puisque ta sonde fonctionne bien avec Arduino.
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello Jean-Marie,
hé oui, la résistance est présente... j'ai même essayé la version sans résistance avec les 2 broches branchée au GND (fonctionnement en tension résiduelle?) mais rien à faire.... bon, j'vas continuer à fouiner...
hé oui, la résistance est présente... j'ai même essayé la version sans résistance avec les 2 broches branchée au GND (fonctionnement en tension résiduelle?) mais rien à faire.... bon, j'vas continuer à fouiner...
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonsoir Fidoboulettes
Jai essayé le script de https://github.com/ok1cdj/ESP8266-LUA/b ... ds1820.lua
ça semble être le même script que celui que tu as utilisé
J'ai un peu modifié le script pour mettre des commentaires devant l'envoi des données à thingspeak.com
trois tirets --- devant les lignes à commenter
J'ai également modifié la dernière ligne pour avoir une mesure toutes les 10 secondes
Dans la version originale, la première mesure intervenait après une minute.
Voici les résultats dans la console Lua
Il y a un piège sur la numérotation des GPIO, il faut aller voir dans la doc des API
En plus il y a deux tables pour deux générations de puces
Pour ma part j'ai utilisé la pin 5 = GPIO14
Essaye avec pin=2 tu as peut être une vieille génération de puce.
Et sur l'ESP-201 c'est peut-être encore différent
http://smarpl.com/sites/default/files/d ... ce-v01.pdf
Essaye avec pin=9
SMBA38
Jai essayé le script de https://github.com/ok1cdj/ESP8266-LUA/b ... ds1820.lua
ça semble être le même script que celui que tu as utilisé
J'ai un peu modifié le script pour mettre des commentaires devant l'envoi des données à thingspeak.com
trois tirets --- devant les lignes à commenter
J'ai également modifié la dernière ligne pour avoir une mesure toutes les 10 secondes
Dans la version originale, la première mesure intervenait après une minute.
Code : Tout sélectionner
-- Measure temperature and post data to thingspeak.com
-- 2014 OK1CDJ
--- Tem sensor DS18B20 is conntected to GPIO14=PIN=5
--- 2015.01.21 sza2 temperature value concatenation bug correction
pin = 5
ow.setup(pin)
counter=0
lasttemp=-999
function bxor(a,b)
local r = 0
for i = 0, 31 do
if ( a % 2 + b % 2 == 1 ) then
r = r + 2^i
end
a = a / 2
b = b / 2
end
return r
end
--- Get temperature from DS18B20
function getTemp()
addr = ow.reset_search(pin)
repeat
tmr.wdclr()
if (addr ~= nil) then
crc = ow.crc8(string.sub(addr,1,7))
if (crc == addr:byte(8)) then
if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then
ow.reset(pin)
ow.select(pin, addr)
ow.write(pin, 0x44, 1)
tmr.delay(1000000)
present = ow.reset(pin)
ow.select(pin, addr)
ow.write(pin,0xBE, 1)
data = nil
data = string.char(ow.read(pin))
for i = 1, 8 do
data = data .. string.char(ow.read(pin))
end
crc = ow.crc8(string.sub(data,1,8))
if (crc == data:byte(9)) then
t = (data:byte(1) + data:byte(2) * 256)
if (t > 32768) then
t = (bxor(t, 0xffff)) + 1
t = (-1) * t
end
t = t * 625
lasttemp = t
print("Last temp: " .. lasttemp)
end
tmr.wdclr()
end
end
end
addr = ow.search(pin)
until(addr == nil)
end
--- Get temp and send data to thingspeak.com
function sendData()
getTemp()
t1 = lasttemp / 10000
t2 = (lasttemp >= 0 and lasttemp % 10000) or (10000 - lasttemp % 10000)
print("Temp:"..t1 .. "."..string.format("%04d", t2).." C\n")
-- conection to thingspeak.com
---print("Sending data to thingspeak.com")
---conn=net.createConnection(net.TCP, 0)
---conn:on("receive", function(conn, payload) print(payload) end)
-- api.thingspeak.com 184.106.153.149
---conn:connect(80,'184.106.153.149')
---conn:send("GET /update?key=YOURKEY&field1="..t1.."."..string.format("%04d", t2).." HTTP/1.1\r\n")
---conn:send("Host: api.thingspeak.com\r\n")
---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)
--- print("Closing connection")
--- conn:close()
--- end)
---conn:on("disconnection", function(conn)
--- print("Got disconnection...")
--- end)
end
-- send data every X ms to thing speak
tmr.alarm(0, 10000, 1, function() sendData() end )
Code : Tout sélectionner
dofile("ds18b20_inter.lua")
> Last temp: 231875
Last temp: 265000
Temp:26.5000 C
Last temp: 231875
Last temp: 264375
Temp:26.4375 C
Last temp: 231875
Last temp: 308125
Temp:30.8125 C
En plus il y a deux tables pour deux générations de puces
Pour ma part j'ai utilisé la pin 5 = GPIO14
Essaye avec pin=2 tu as peut être une vieille génération de puce.
Et sur l'ESP-201 c'est peut-être encore différent
http://smarpl.com/sites/default/files/d ... ce-v01.pdf
Essaye avec pin=9
Code : Tout sélectionner
Nouvelle table
0 [*] GPIO16
1 GPIO5
2 GPIO4
3 GPIO0
4 GPIO2
5 GPIO14
6 GPIO12
7 GPIO13
8 GPIO15
9 GPIO3
10 GPIO1
11 GPIO9
12 GPIO10
Ancienne table
0 GPIO12
1 GPIO13
2 GPIO14
3 GPIO15
4 GPIO3
5 GPIO1
6 GPIO9
7 GPIO10
8 GPIO0
9 GPIO2
10 GPIO4
11 GPIO5
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonjour SMBA38,
merci de te pencher sur mon cas... Alors tout d'abord, j'ai bien revérifié que ma sonde fonctionnait toujours en la repassant sur mon arduino uno --> ok.
J'ai ensuite re-branché le tout sur Mon ESP... GPIO 14... j'ai essayé dans ton programme (qui au passage était exactement celui que j'avais pris sur instructables) l'ancienne et nouvelle nomenclature... mais normalement ça devrait être la nouvelle vu que je suis en NodeMCU 0.9.6 si j'ai bien tout compris... mais rien à faire... toujours cette satané température de -1.09°C...
Par acquis de conscience, au cas ou j'ai un soucis de GPIO, j'ai pluggé la sonde sur le GPIO2, l'ai déclaré comme PIN = 4 (Nouvelle nomenclature) --> pas ok, puis PIN=14 (ancienne) --> pin n'existe pas!...
C'est vraiment déconcertant.
Je me demande si c'est pas le FW qui déconne... je vais tenter de le reflasher avec l'ancien
Bon, c'est pas grave, je me suis commandé un ESP-01 qui devrait arriver demain ou mardi, je recommencerai à ce moment là....
merci de te pencher sur mon cas... Alors tout d'abord, j'ai bien revérifié que ma sonde fonctionnait toujours en la repassant sur mon arduino uno --> ok.
J'ai ensuite re-branché le tout sur Mon ESP... GPIO 14... j'ai essayé dans ton programme (qui au passage était exactement celui que j'avais pris sur instructables) l'ancienne et nouvelle nomenclature... mais normalement ça devrait être la nouvelle vu que je suis en NodeMCU 0.9.6 si j'ai bien tout compris... mais rien à faire... toujours cette satané température de -1.09°C...
Par acquis de conscience, au cas ou j'ai un soucis de GPIO, j'ai pluggé la sonde sur le GPIO2, l'ai déclaré comme PIN = 4 (Nouvelle nomenclature) --> pas ok, puis PIN=14 (ancienne) --> pin n'existe pas!...
C'est vraiment déconcertant.
Je me demande si c'est pas le FW qui déconne... je vais tenter de le reflasher avec l'ancien
Bon, c'est pas grave, je me suis commandé un ESP-01 qui devrait arriver demain ou mardi, je recommencerai à ce moment là....
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonjour Fidoboulettes.
Une question , comment as tu branché le DS18B20: en mode parasite avec deux fils , avec 3 fils, en 3,3V, en 5V?.
Dans mes tests j'ai utilisé 3 fils en 3,3V
http://hacklab.fi/news/esp8266-ds18b20- ... k-nodemcu/
dans le code la recherche du DS18B20 est faite sur le N° de famille = 0x28.
J'ai essayé en changeant dans le code le code de la famille 0x28 en 0x27, et j'ai la même valeur de température que toi ?.
l'ESP8266 ne trouve pas dans ce cas le DS18B20.
si tu as utilisé un branchement en mode parasite, essaye le branchement avec trois fils.
SMBA38.
Une question , comment as tu branché le DS18B20: en mode parasite avec deux fils , avec 3 fils, en 3,3V, en 5V?.
Dans mes tests j'ai utilisé 3 fils en 3,3V
http://hacklab.fi/news/esp8266-ds18b20- ... k-nodemcu/
dans le code la recherche du DS18B20 est faite sur le N° de famille = 0x28.
J'ai essayé en changeant dans le code le code de la famille 0x28 en 0x27, et j'ai la même valeur de température que toi ?.
l'ESP8266 ne trouve pas dans ce cas le DS18B20.
si tu as utilisé un branchement en mode parasite, essaye le branchement avec trois fils.
SMBA38.
- Jean-Marie
- Raspinaute
- Messages : 240
- Enregistré le : sam. 24 janv. 2015 18:01
- Localisation : Arlon, Belgique
- Contact :
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello SMBA38
Tu as pris la T° toutes les dix secondes mais tu passes de 26.4375 C à 30.8125 C.
Serais-tu un fumeur de Havane comme Gainsbard ?
Dans ce cas, ne t'approche pas trop de la sonde.
Tu as pris la T° toutes les dix secondes mais tu passes de 26.4375 C à 30.8125 C.
Serais-tu un fumeur de Havane comme Gainsbard ?
Dans ce cas, ne t'approche pas trop de la sonde.
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonjour à tous,
en fait j'ai essayé les deux, parasite et connecté au 3v3... mais rien a faire... tout pareil...
Je n'ai par contre rien compris à ton histoire de code de famille... Et rien vu dans le code traitant de cela... a quelle ligne et comment remplacer cela?
Merci
en fait j'ai essayé les deux, parasite et connecté au 3v3... mais rien a faire... tout pareil...
Je n'ai par contre rien compris à ton histoire de code de famille... Et rien vu dans le code traitant de cela... a quelle ligne et comment remplacer cela?
Merci
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello
As tu essayé avec pin=9 ?
La ligne qui teste le code famille est la suivante (dans le script que j'ai indiqué dans un message précédent).
0x10 et 0x28 correspondent aux codes familles http://owfs.sourceforge.net/family.html
Mais il y a d'autres familles que 0x10 et 0x28 pour les capteurs de température.
Sur ton script Arduino la recherche s'effectue peut être sur tous les codes familles.
Essaye ce second script qui a l'avantage de sortir une erreur si aucun capteur n'est trouvé.
Sur le bus 1-wire j'ai deux DS18B20 il y a donc deux lignes avec des températures.
J'ai branché le bus 1-Wire après le message No device present on the OneWireBus.
SMBA38
Entre temps j'ai soufflé (A jeun ) sur la sonde.Jean-Marie a écrit :
Tu as pris la T° toutes les dix secondes mais tu passes de 26.4375 C à 30.8125 C.
Serais-tu un fumeur de Havane comme Gainsbard ?
Dans ce cas, ne t'approche pas trop de la sonde.
As tu essayé avec 3 fils?Fidoboulettes a écrit : en fait j'ai essayé les deux, parasite et connecté au 3v3... mais rien a faire... tout pareil...
Je n'ai par contre rien compris à ton histoire de code de famille... Et rien vu dans le code traitant de cela... a quelle ligne et comment remplacer cela?
As tu essayé avec pin=9 ?
La ligne qui teste le code famille est la suivante (dans le script que j'ai indiqué dans un message précédent).
Code : Tout sélectionner
if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then
Mais il y a d'autres familles que 0x10 et 0x28 pour les capteurs de température.
Sur ton script Arduino la recherche s'effectue peut être sur tous les codes familles.
Essaye ce second script qui a l'avantage de sortir une erreur si aucun capteur n'est trouvé.
Sur le bus 1-wire j'ai deux DS18B20 il y a donc deux lignes avec des températures.
J'ai branché le bus 1-Wire après le message No device present on the OneWireBus.
Code : Tout sélectionner
-- Read temperature from all DS18B20 sensors on the OneWireBus
-- Using NodeMCU 0.9.5 build 20150106
function prinTemp ()
local pin = 5 -- use GPIO-14
local tempL, tempH, temp = 0
local power, nopower = 1, 0
ow.setup(pin)
if ow.reset(pin) == 1 then
counter = counter + 1
print("Start conversion: " .. counter)
-- Select all devices on the owbus and start conversion on all devices
-- power the bus during conversion
ow.skip(pin)
ow.write(pin, 0x44, power)
tmr.wdclr() -- keep the watchdog happy
tmr.delay(750000) -- wait max 750 msec for conversion to complete
-- start searching DS18B20 (0x28) devices only
ow.reset_search(pin)
ow.target_search(pin,0x28)
-- search the first device
local addr = ow.search(pin)
-- and loop through all devices
while addr do
tmr.wdclr()
-- print(addr:byte(1,8))
ow.reset(pin)
ow.select(pin, addr) -- select the found sensor
ow.write(pin, 0xBE, nopower) -- READ_SCRATCHPAD
-- read temperature LSB + MSB bytes from sensor
temp = ( ow.read(pin) + ow.read(pin) * 256 ) * 625
-- stop reading rest of scratchpad ram after the first 2 bytes
ow.reset(pin)
-- floating point temperature with 1 decimal
tempH = temp / 10000
tempL = ( temp % 10000 ) / 1000
-- round up 1st decimal using second decimal
round = ( temp % 1000 ) / 100
if round >= 5 then
tempL = tempL + 1
end
-- print("T=" .. tempH .. "." .. tempL .. " C - " .. temp)
print("T=" .. tempH .. "." .. tempL)
-- search next device
addr = ow.search(pin)
end
else
print("No device present on the OneWireBus.")
end
end
-- Main program starts here
counter = 0
-- set timer to print temperature every 10 seconds
tmr.alarm(1, 10 * 1000, 1, prinTemp )
Code : Tout sélectionner
No device present on the OneWireBus.
Start conversion: 1
T=24.4
T=26.9
Start conversion: 2
T=24.4
T=26.8
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Re,
j'avais vu entretemps la ligne contenant les codes de famille... l'ai passé en 0x27 pour voir mais tt pareil.
Alors oui, branchement avec 3 fil + résistance 4.7k entre Vdd et le fil de transmission... essayé aussi le script gpio 14 = 9 ou gpio 14 = 5... mais rien ne bouge....
Je viens de lancer ton test et voici le résultat:
name:ds1820.lua, size:2854
> Start conversion: 1
Start conversion: 2
T=24.8
Start conversion: 3
Start conversion: 4
T=24.9
Start conversion: 5
Start conversion: 6
T=24.9
Start conversion: 7
Start conversion: 8
T=24.8
Start conversion: 9
Start conversion: 10
T=24.9
Start conversion: 11
Start conversion: 12
T=24.9
Start conversion: 13
Start conversion: 14
T=24.9
Start conversion: 15
Start conversion: 16
T=24.8
Start conversion: 17
Start conversion: 18
T=24.8
Start conversion: 19
Start conversion: 20
Start conversion: 21
.
.
.
mais j'avoue que là j'y comprend rien.
j'avais vu entretemps la ligne contenant les codes de famille... l'ai passé en 0x27 pour voir mais tt pareil.
Alors oui, branchement avec 3 fil + résistance 4.7k entre Vdd et le fil de transmission... essayé aussi le script gpio 14 = 9 ou gpio 14 = 5... mais rien ne bouge....
Je viens de lancer ton test et voici le résultat:
name:ds1820.lua, size:2854
> Start conversion: 1
Start conversion: 2
T=24.8
Start conversion: 3
Start conversion: 4
T=24.9
Start conversion: 5
Start conversion: 6
T=24.9
Start conversion: 7
Start conversion: 8
T=24.8
Start conversion: 9
Start conversion: 10
T=24.9
Start conversion: 11
Start conversion: 12
T=24.9
Start conversion: 13
Start conversion: 14
T=24.9
Start conversion: 15
Start conversion: 16
T=24.8
Start conversion: 17
Start conversion: 18
T=24.8
Start conversion: 19
Start conversion: 20
Start conversion: 21
.
.
.
mais j'avoue que là j'y comprend rien.