Tous les capteurs reliés au RPI par Wifi avec module ESP8266
Modérateur : Francois
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonjour Korhm,
Le fichier Flag sert à indiquer à init.lua s'il doit doit lancer le programme (par exemple dofile("gestion_temp .lua") prévu en fonctionnement normal ou s'il doit se mettre en attente de commandes à interpréter .
Le fichier Flag pourrait même contenir le nom d'un fichier lua à lancer.
On peut également envoyer à l'interpréteur du source lua.
Voir
node.input()
node.output()
node.compile()
https://github.com/nodemcu/nodemcu-firm ... mcu_api_en
Avec lua configuré en serveur Telnet on peut à distance via le Wifi avoir la main sur la console Lua.
SMBA38.
Le fichier Flag sert à indiquer à init.lua s'il doit doit lancer le programme (par exemple dofile("gestion_temp .lua") prévu en fonctionnement normal ou s'il doit se mettre en attente de commandes à interpréter .
Le fichier Flag pourrait même contenir le nom d'un fichier lua à lancer.
On peut également envoyer à l'interpréteur du source lua.
Voir
node.input()
node.output()
node.compile()
https://github.com/nodemcu/nodemcu-firm ... mcu_api_en
Avec lua configuré en serveur Telnet on peut à distance via le Wifi avoir la main sur la console Lua.
SMBA38.
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello Korhm,
Voici un exemple de commande à distance d'un esp8266 en Wifi via putty.
A la place du fichier flag indiqué dans mes posts précédents, , je suis passé par une variable r
depuis le client Telnet je peux saisir r=1 ou r=2 pour décider d'exécuter un traitement ou d'attendre des commandes Lua.
les prints depuis Lua sont envoyés sur Telnet.
On peut également tester les données envoyées via Telnet pour décider quel traitement faire dans ce cas on ne fait pas appel = node.input(str) pour envoyer les données l'interpréteur.
On peut via Telnet envoyer des ordre d'exécution de traitements, par exemple dofile("trait2.lua") ...
On a donc pas mal de possibilités , il suffit d'avoir des idées.
Fichier init.lua
Et voici la trace dans putty sur le port 2323
SMBA38
Voici un exemple de commande à distance d'un esp8266 en Wifi via putty.
A la place du fichier flag indiqué dans mes posts précédents, , je suis passé par une variable r
depuis le client Telnet je peux saisir r=1 ou r=2 pour décider d'exécuter un traitement ou d'attendre des commandes Lua.
les prints depuis Lua sont envoyés sur Telnet.
On peut également tester les données envoyées via Telnet pour décider quel traitement faire dans ce cas on ne fait pas appel = node.input(str) pour envoyer les données l'interpréteur.
On peut via Telnet envoyer des ordre d'exécution de traitements, par exemple dofile("trait2.lua") ...
On a donc pas mal de possibilités , il suffit d'avoir des idées.
Fichier init.lua
Code : Tout sélectionner
--
-- Exemple de serveur Telnet pour prendre la main à distance via le WiFi sur un ESP8266
-- SMBA38 06/2015
--
-- A partir d'un client Telnet (par exemple putty)
-- dans putty cocher Implicit CR in every LF dans les options du terminal
-- Depuis le Telnet client, envoi de la commande r=1 ou r=2 pour activer ou non des traitements
wifi.setmode(wifi.STATION) -- Wifi en mode station
cfg = { ip="192.168.1.154", netmask="255.255.255.0", gatway="192.168.1.1"}
wifi.sta.setip(cfg) -- on force l'adresse IP
wifi.sta.config("WRT54G_409B","xxxxxxxxxxxxxxxxxxxxxx")
while (wifi.sta.getip() == nil) do tmr.delay(100000) end print(wifi.sta.getip()) -- Affichage adresse IP
--function tonet(str)
-- sk:send(str)
-- -- print(str) Attention , ne pas faire de print dans cette function
-- -- Sinon appel récursif de fonction!!!
-- end
-- Serveur Telnet sur port 2323
s=net.createServer(net.TCP)
s:listen(2323,function(c)
con_std = c
function s_output(str)
if(con_std~=nil)
then con_std:send(str)
end
end
node.output(s_output, 0) -- redirection sortie vers la fonction s_ouput.
c:on("receive",function(c,l)
node.input(l) -- idem pcall(loadstring(l)) avec plusieurs lignes possibles
end)
c:on("disconnection",function(c)
con_std = nil
node.output(nil) -- la sortie est de nouveau sur le port série
end)
end)
x2=0
function trait(x)
if x ~= x2 then
if x==1 then
print ("mode run")
end
if x== 2 then
print ("mode commande")
end
x2=x
end
end
r=1
tmr.alarm(0,5000, 1, function() trait(r) end ) -- boucle sur attente ordre via Telnet
Code : Tout sélectionner
>
> r=2
> mode commande
> r=1
> mode run
> r=2
> mode commande
> print (node.info())
0 9 6 10197774 1458415 4096 0 40000000
>-- majorVer, minorVer, devVer, chipid,flashid , flashsize, flashmode, flashspeed
> print(node.heap())
16296
> print("aa");print("bb")
aa
bb
>
> aa
stdin:2: '=' expected near 'aa'
>
Modifié en dernier par smba38 le mer. 3 juin 2015 08:31, modifié 6 fois.
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonjour,
je reviens vers vous après quelques jours de test.... j'ai reçu mon esp-01, l'ai branché et ai fait les premières installes des scripts DS18B20 et cela à fonctionné sans problème en pluggant la sonde au GPIO 0... du coup, ne voulant pas rester sur un echec avec mon ESP-201, j'ai reflashé le tout, rebranché tout pareil et là miracle, ça roule (pour rappel, NodeMCU 0.9.5, les différents scripts + la sonde - GPIO 0). En fait, le soucis que je rencontre actuellement, c'est que lorsque je débranche l'ESP (01 ou 201) et que je le rebranche, ESplorer ou lua loader a les pires difficultés à communiquer avec le module... Ce que je suis obligé de faire, et c'est complètement aléatoire, c'est de débrancher la pin CH_PD et de la rebrancher au 3v3... et encore, cela ne marche pas à tous les coups... je suis souvent obligé de passer par la case reflasher le firmware pour reprendre la main sur le module... Je soupconne un pb de branchement mais n'en suis pas sur.
Vous auriez une idée de ce que cela pourrait être:
* Branché sur mon port USB (COM 4 ), une clé FDTI fournissant le 3V3, le VCC et les fils de communication.
* L'ESP est sur une Bredboard
* le 3v3 branché au 3v3 (logique ) ainsi que la broche 7 CHIP_EN (CH_PD????)
* Le GND au GND (re-logique ) ainsi que la broche 8 - IO 15 (j'avais lu ça je sais plus où)
* Enfin, uniquement pour flasher le FW (après je re-débranche), la broche 3 - IO 0 au GND.
Voilà, ça c'est le branchement de base....
Je me suis aussi demandé si je ne devais pas mettre la broche 32 - RST quelque part (3v3 ou GND) pour que l'ESP se comporte comme un arduino à chaque fois que l'on veux téléverser des données.
Voilà, j'espère avoir été clair dans mes explications...
je reviens vers vous après quelques jours de test.... j'ai reçu mon esp-01, l'ai branché et ai fait les premières installes des scripts DS18B20 et cela à fonctionné sans problème en pluggant la sonde au GPIO 0... du coup, ne voulant pas rester sur un echec avec mon ESP-201, j'ai reflashé le tout, rebranché tout pareil et là miracle, ça roule (pour rappel, NodeMCU 0.9.5, les différents scripts + la sonde - GPIO 0). En fait, le soucis que je rencontre actuellement, c'est que lorsque je débranche l'ESP (01 ou 201) et que je le rebranche, ESplorer ou lua loader a les pires difficultés à communiquer avec le module... Ce que je suis obligé de faire, et c'est complètement aléatoire, c'est de débrancher la pin CH_PD et de la rebrancher au 3v3... et encore, cela ne marche pas à tous les coups... je suis souvent obligé de passer par la case reflasher le firmware pour reprendre la main sur le module... Je soupconne un pb de branchement mais n'en suis pas sur.
Vous auriez une idée de ce que cela pourrait être:
* Branché sur mon port USB (COM 4 ), une clé FDTI fournissant le 3V3, le VCC et les fils de communication.
* L'ESP est sur une Bredboard
* le 3v3 branché au 3v3 (logique ) ainsi que la broche 7 CHIP_EN (CH_PD????)
* Le GND au GND (re-logique ) ainsi que la broche 8 - IO 15 (j'avais lu ça je sais plus où)
* Enfin, uniquement pour flasher le FW (après je re-débranche), la broche 3 - IO 0 au GND.
Voilà, ça c'est le branchement de base....
Je me suis aussi demandé si je ne devais pas mettre la broche 32 - RST quelque part (3v3 ou GND) pour que l'ESP se comporte comme un arduino à chaque fois que l'on veux téléverser des données.
Voilà, j'espère avoir été clair dans mes explications...
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello fidoboulettes,
Il faut ponter CH_PD sur VCC pour activer le module
Il faut ponter GPIO0 à la masse pour pouvoir flasher (ne pas oublier de supprimer le pontage une fois le flash terminé)
Relier le GPIO15 à la masse (si présent)
RST sur la masse pour faire un reset du module.
pour gérer l'ESP8266 en Lua j'utilise NodeMCU Studio build20150111.exe
Essaye de faire un reset avant de te connecter à l'ESP8266.
SMBA38.
Il faut ponter CH_PD sur VCC pour activer le module
Il faut ponter GPIO0 à la masse pour pouvoir flasher (ne pas oublier de supprimer le pontage une fois le flash terminé)
Relier le GPIO15 à la masse (si présent)
RST sur la masse pour faire un reset du module.
pour gérer l'ESP8266 en Lua j'utilise NodeMCU Studio build20150111.exe
Essaye de faire un reset avant de te connecter à l'ESP8266.
SMBA38.
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonjour à tous
Merci pour l'exemple Telnet SMBA38, je testerais dès que.... j'aurais réglé mon problème avec le wifi
Donc j'ai bien réussi, via l'IDE Arduino, à modifier le SDK pour forcé l'utilisation du wifi mode G (cf posts précédents)
Mais comme j'aimerais bien tout faire marcher avec nodeMcu, je me suis penché sur deux points :
1. Recompiler le SDK après avoir fait la modif. J'ai bien réussi à créer des .bin et à flasher mon ESP-01, mais ça n'a pas l'air de très bien marcher.
J'ai compilé et installé la toolchain xtensa, mais au moment de complié le SDK, à la fin j'ai le message
Alors que mon $PATH semble pas trop mal
EDIT : J'avais ce message d'erreur en faisant un sudo make. Donc normal vu que le $PATH était celui de mon user principal.
Si je lance le make en normal, j'avais un message d'erreur IOError: [Errno 2] No such file or directory: '../bin/0x00000.bin'
Un simple mkdir bin et ça semble marcher sans erreur
J'ai pas le module sur moi pour tester, je vous en dirais plus ce soir
/EDIT
2. En voulant utiliser la dernière release de nodemcu 0.9.6-dev_20150406, qui semble donc avoir été compilé le 06/04/15, j'ai trouvé dans la doc la chose suivante (https://github.com/nodemcu/nodemcu-firm ... v_20150406)
Mais la release date du 6 Avril, et les fonctions ont été ajoutée le 30 Avril.
Et impossible de trouvé un binaire postérieur à cette date (et bien sur je n'arrive pas à compiler correctement ma release....)
Merci pour l'exemple Telnet SMBA38, je testerais dès que.... j'aurais réglé mon problème avec le wifi
Donc j'ai bien réussi, via l'IDE Arduino, à modifier le SDK pour forcé l'utilisation du wifi mode G (cf posts précédents)
Mais comme j'aimerais bien tout faire marcher avec nodeMcu, je me suis penché sur deux points :
1. Recompiler le SDK après avoir fait la modif. J'ai bien réussi à créer des .bin et à flasher mon ESP-01, mais ça n'a pas l'air de très bien marcher.
J'ai compilé et installé la toolchain xtensa, mais au moment de complié le SDK, à la fin j'ai le message
Code : Tout sélectionner
Error calling xtensa-lx106-elf-nm, do you have Xtensa toolchain in PATH?
Code : Tout sélectionner
$ echo $PATH
/home/damien/dev/esp-open-sdk/xtensa-lx106-elf/bin:/home/damien/bin:/home/damien/.nvm/v0.10.31/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$
$ which xtensa-lx106-elf-nm
/home/damien/dev/esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-nm
Si je lance le make en normal, j'avais un message d'erreur IOError: [Errno 2] No such file or directory: '../bin/0x00000.bin'
Un simple mkdir bin et ça semble marcher sans erreur
Code : Tout sélectionner
$ tree bin/
bin/
├── 0x00000.bin
└── 0x10000.bin
/EDIT
2. En voulant utiliser la dernière release de nodemcu 0.9.6-dev_20150406, qui semble donc avoir été compilé le 06/04/15, j'ai trouvé dans la doc la chose suivante (https://github.com/nodemcu/nodemcu-firm ... v_20150406)
Ca tombe bien j'ai des problème au niveau du mode physique.wifi module
wifi.setmode()
wifi.getmode()
wifi.getchannel() --Added on 05/22/2015
wifi.setphymode() --Added on 04/30/2015
wifi.getphymode() --Added on 04/30/2015
wifi.startsmart()
wifi.stopsmart()
wifi.sleeptype()
Mais la release date du 6 Avril, et les fonctions ont été ajoutée le 30 Avril.
Et impossible de trouvé un binaire postérieur à cette date (et bien sur je n'arrive pas à compiler correctement ma release....)
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonsoir Korhm,
Pour recompiler NodeMcu j’utilise la machine virtuelle fournie par Espressif
https://drive.google.com/folderview?id= ... sp=sharing
Cette VM sous Ubuntu contient la toulchain Xtensa (Mot de passe sous linux -> espressif)
Cette VM est prévue à la base pour compiler le firmware des commandes AT
J’ai utilisé Virtualbox 4.3.28 sous W8.1 pour lancer la VM
Les sources sont à placer dans un répertoire Windows (nodemcu-firmware-0.9.6-dev_20150406 dans mon cas)
Ensuite il faut déclarer ce répertoire partagé dans la VM
Ensuite Sous linux
./mount.sh (Mot de passe expressif)
cd Share
cd nodemcu-firmware-0.9.6-dev_20150406/app
Pour éviter les erreurs, Il y a quelques ajouts avant de compiler nodemcu 0.9.6
Il faut ajouter include/xtensa/simcall-fcntl.h
I lfaut ajouter le package python serial -> sudo apt-get install python-serial
J’ai modifié le fichier app/lua.c -> Ajout du texte SMBA38
make clean all
make
dans bin deux fichiers binaires sont créés 0x00000.bin et 0x10000.bin
Lua se lance bien mais pb pour créer le fichier init.lua
J’ai remis la version 0.9.6 à partir du binaire unique (nodemcu_integer_0.9.6-dev_20150406.bin)
J’ai effacé les fichiers de la mémoire flash -> file.format()
J’ai remis la version 0.9.6 recompilée
Et ça à l’air de fonctionner.
Sur le répertoire bin il existe deux autres fichiers (non issus de la compilation)
Sur le Firmware des commandes AT:
esp_init_data_default.bin à flasher en principe en 0x7C000
blank.bin à flasher en principe en 0x7E000
je n'ai pas utilisé ces fichiers
esp_init_data_default.bin fait un raz de la configuration utilisateur
blank.bin un raz de la configuration Wifi.
j’ai utilisé ESP8266Flasher03152015.exe pour flasher
j’ai utilisé les options
baudrate 115200 Flash size 4MBytes Flash Speed 40MHZ SPI Mode QIO
J’utilise le kit NodeMcu (10€ sur Internet):
Convertisseur usb /série intégré
A base de ESP-12
4MBytes de mémoire flash
Bonne recompilation
SMBA38
Pour recompiler NodeMcu j’utilise la machine virtuelle fournie par Espressif
https://drive.google.com/folderview?id= ... sp=sharing
Cette VM sous Ubuntu contient la toulchain Xtensa (Mot de passe sous linux -> espressif)
Cette VM est prévue à la base pour compiler le firmware des commandes AT
J’ai utilisé Virtualbox 4.3.28 sous W8.1 pour lancer la VM
Les sources sont à placer dans un répertoire Windows (nodemcu-firmware-0.9.6-dev_20150406 dans mon cas)
Ensuite il faut déclarer ce répertoire partagé dans la VM
Ensuite Sous linux
./mount.sh (Mot de passe expressif)
cd Share
cd nodemcu-firmware-0.9.6-dev_20150406/app
Pour éviter les erreurs, Il y a quelques ajouts avant de compiler nodemcu 0.9.6
Il faut ajouter include/xtensa/simcall-fcntl.h
Code : Tout sélectionner
/* File control operations for Xtensa ISS semihosting. */
/* Copyright (c) 2003 by Tensilica Inc. ALL RIGHTS RESERVED.
These coded instructions, statements, and computer programs are the
copyrighted works and confidential proprietary information of Tensilica Inc.
They may not be modified, copied, reproduced, distributed, or disclosed to
third parties in any manner, medium, or form, in whole or in part, without
the prior written consent of Tensilica Inc. */
#ifndef _SIMCALL_FCNTL_H
#define _SIMCALL_FCNTL_H
#define _SIMC_O_APPEND 0x0008
#define _SIMC_O_NONBLOCK 0x0080
#define _SIMC_O_CREAT 0x0100
#define _SIMC_O_TRUNC 0x0200
#define _SIMC_O_EXCL 0x0400
#define _SIMC_O_TEXT 0x4000
#define _SIMC_O_BINARY 0x8000
#endif /* ! _SIMCALL_FCNTL_H */
I lfaut ajouter le package python serial -> sudo apt-get install python-serial
J’ai modifié le fichier app/lua.c -> Ajout du texte SMBA38
make clean all
make
dans bin deux fichiers binaires sont créés 0x00000.bin et 0x10000.bin
Lua se lance bien mais pb pour créer le fichier init.lua
J’ai remis la version 0.9.6 à partir du binaire unique (nodemcu_integer_0.9.6-dev_20150406.bin)
J’ai effacé les fichiers de la mémoire flash -> file.format()
J’ai remis la version 0.9.6 recompilée
Et ça à l’air de fonctionner.
Code : Tout sélectionner
NodeMCU 0.9.6 build 20150406 powered by SMBA38Lua 5.1.4
lua: cannot open init.lua
> print(node.info())
0 9 6 10197774 1458415 4096 0 40000000
>
Sur le Firmware des commandes AT:
esp_init_data_default.bin à flasher en principe en 0x7C000
blank.bin à flasher en principe en 0x7E000
je n'ai pas utilisé ces fichiers
esp_init_data_default.bin fait un raz de la configuration utilisateur
blank.bin un raz de la configuration Wifi.
j’ai utilisé ESP8266Flasher03152015.exe pour flasher
j’ai utilisé les options
baudrate 115200 Flash size 4MBytes Flash Speed 40MHZ SPI Mode QIO
J’utilise le kit NodeMcu (10€ sur Internet):
Convertisseur usb /série intégré
A base de ESP-12
4MBytes de mémoire flash
Bonne recompilation
SMBA38
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello SMBA,smba38 a écrit :Hello fidoboulettes,
Il faut ponter CH_PD sur VCC pour activer le module
Il faut ponter GPIO0 à la masse pour pouvoir flasher (ne pas oublier de supprimer le pontage une fois le flash terminé)
Relier le GPIO15 à la masse (si présent)
RST sur la masse pour faire un reset du module.
pour gérer l'ESP8266 en Lua j'utilise NodeMCU Studio build20150111.exe
Essaye de faire un reset avant de te connecter à l'ESP8266.
SMBA38.
j'ai tout bien fait comme expliqué mais rien a faire... je n'arrive pas à avoir la main de manière régulière sur l'ESP-201 alors qu'en procédant de même sur le 01 pas de soucis... j'ai même réussi maintenant à faire "parler" le module avec mon RPI et domoticz... ce qui est mon but final... bon c'est aps grave, je vais en restezr là pour l'instant... Voulant avancer, un de mes "buts" est de brancher un BMP085 sur le module.. or, si je ne me trompe pas, l'ESP-01 n'a pas de ports I2C... pourrais tu me confirmer cela? Si c'est effectif, quel serait l'ESP à acheter, qui soit facile à plugger sur une bredboard (sans faire trop de soudures quoi) et qui n'ai pas trop de GPIO (après qui peux le plus peux le moins.... ) et qui ai justement les ports I2C?
merci à toi
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonsoir SMBA,
Merci beaucoup pour tout ces détails !
Personnellement j'ai compilé grâce à la toolchain Xtensa que j'ai installé sur mon serveur Debian.
J'ai bien l'air d'être arrivé à la même étape que toi :
Merci beaucoup pour tout ces détails !
Personnellement j'ai compilé grâce à la toolchain Xtensa que j'ai installé sur mon serveur Debian.
J'ai bien l'air d'être arrivé à la même étape que toi :
Je n'ai pas été plus loin dans le flashage pour le moment, mais je prends note de tout tes conseilsdans bin deux fichiers binaires sont créés 0x00000.bin et 0x10000.bin
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonsoir Fidoboulettes.
ESP-01 ne dispose que de deux GPIOs GPIO0 et GPIO2
Il me semble que l'on puisse utiliser l'I2C sur un esp-01.
Branche une puce I2C sur les GPIO0 et GPIO2 et essaye le scanner http://www.areresearch.net/2015/04/scan ... sp-01.html
Par contre il faut utiliser le GPIO0 pour Flasher mais après le flashage on peut utiliser le GPIO0 pour autre chose.
Les ESP-12 ou l'ESP-12E sont pas mal , en plus il disposent d'une entrée ADC.
Mais comme le pas des ESP-12 est de 2mn, il faut en plus acheter un PCB de conversion 2mn -> 2.54mn.
Sur Internet on trouve des kits ESP-12 + PCB de conversion.
Mais pour les tests j'utilise le kit NodeMcu (< 10€ sur Internet), c'est super car il a un convertisseur USB/Série intégré .
Et on est sur qu'il n'y aura pas de problème avec Lua puisque c'est NodeMcu qui est à l'origine de Lua sur ESP8266.
Je serais de retour sur le Forum dans quelques jours car Je pars en voyage à Dublin gouter quelques bières.
A+
SMBA38.
ESP-01 ne dispose que de deux GPIOs GPIO0 et GPIO2
Il me semble que l'on puisse utiliser l'I2C sur un esp-01.
Branche une puce I2C sur les GPIO0 et GPIO2 et essaye le scanner http://www.areresearch.net/2015/04/scan ... sp-01.html
Par contre il faut utiliser le GPIO0 pour Flasher mais après le flashage on peut utiliser le GPIO0 pour autre chose.
Les ESP-12 ou l'ESP-12E sont pas mal , en plus il disposent d'une entrée ADC.
Mais comme le pas des ESP-12 est de 2mn, il faut en plus acheter un PCB de conversion 2mn -> 2.54mn.
Sur Internet on trouve des kits ESP-12 + PCB de conversion.
Mais pour les tests j'utilise le kit NodeMcu (< 10€ sur Internet), c'est super car il a un convertisseur USB/Série intégré .
Et on est sur qu'il n'y aura pas de problème avec Lua puisque c'est NodeMcu qui est à l'origine de Lua sur ESP8266.
Je serais de retour sur le Forum dans quelques jours car Je pars en voyage à Dublin gouter quelques bières.
A+
SMBA38.
Modifié en dernier par smba38 le jeu. 4 juin 2015 08:49, modifié 1 fois.
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Merci SMBA,
je vais tester cela... bonnes binouzes alors....
je vais tester cela... bonnes binouzes alors....