ESP8266 moduli

Tällä kertaa käsissä pikkuruinen ja edullinen WLAN-moduli ESP8266.  Kuvassa on myös nRF24L01(+)-moduli josta juttua tuonnempana, kunhan ehdin testata sitä. ESP8266 on tuhottoman suosittu, siitä löytyy juttua vaikka kuinka paljon netistä, mutta lisätään silti pätkä.

ESP8266 & nRF24L01(+)
Vasemmalla ESP8266 ja oikealla nRF24L01(+)

Modulilla on yllättävän pitkä toiminta säde. Hiukan avustettuna jopa reilu neljä kilometriä! (mm. CNLohr youtubessa on tehnyt videon asiasta) Todellinen ja käyttökelpoinen etäisyys on kuitenkin huomattavasti lyhyempi, en ole kuitenkaan itse sitä mitenkään testannut. Luultavasti modulin omalla antennilla ei kovin kummoisia etäisyyksiä saa aikaiseksi.

Moduli toimii 3.3v jännitteellä ja vaikka joissain paikoissa sanotaan, että sen datapinnit sietävät 5v volttia, päätin kuitenkin olla IMG_20150216_133915kokeilematta asiaa. Moduuli ei ole erityisemmän koekytkentälevy ystävällinen, joten tein adapterin sitä varten.  ESP8266_V091

Kuvassa on pinni järjestys.GND maahan ja Vcc 3.3volttiin. CH_PD pitää myös olla 3.3voltissa. RX ja TX vastaaviin pinneihin USB to serial adapteriin. Käytin arduino IDEä terminaali ohjelmana.

 

esp8266 ap
WLAN verkon teko ESP8266 modulilla. Näillä asetuksilla mitään verkolla ei voi tehdä, mutta siihen voi liittyä.

Modulia ohjataan AT-komennoilla (Vanhat parrat muistavat  AT-komennot modeemien aikakaudelta).  Kuvissa on kaksi eri versiota yhteydestä toisessa tehdään WLAN, johon voi kytkeytyä, mutta jossa ei viellä tuossa vaiheessa voinut tehdä mitään muuta.

 

 

Toisessa kuvssa liitytään omaan WLANiin ja  haetaan serveriltä tiedosto. Itse yhteyden muodostusta kuvassa ei ole, mutta listaan komennot tähän.

 

Siirrytään “station” moodiin, jolla päästään liittymään WLANiin.

AT+CWMODE=1

Seuraavaksi liitytään WLANiin

AT+CWJAP="ssid","password"
esp8266 get test
Tiedoston haku ESP8266 moduulilla.

IP numeron voi halutessaan tarkistaa komennolla

AT+CIFSR

Jatko on kuvattu kuvassa. Haettu tiedosto sisältää vain “Success!!!”.  Ennen tiedoston sisältöä kerrotaan kuinka paljon tietoa on tulossa. Tässä tapauksessa “+IPD,10: ” tarkoittaa, että tulossa on 10 merkkiä.

Käytin Vaasan Haclabin ohjeita yhteyden tekemisessä. Selvillä on vasta ihan perusasiat tästä modulista ja sen mahdollisuuksista.

 

Pieniä ideoita on mielessä, esimerkiksi tuon sarastevalon muuttamista webin puolelta ohjattavaksi, mutta mitään varmaa ei viellä ole mielessä.

 

 

http://wiki.iteadstudio.com/ESP8266_Serial_WIFI_Module

https://nurdspace.nl/ESP8266

http://www.esp8266.com

https://github.com/nodemcu

http://www.electrodragon.com/w/ESP8266

RFID ohjattu kissan ruokinta-automaatti

Tässä kämpässä pyörii ahmatti kissa ja napostelija kissa. Kuivaruokaa ei siis voi pitää koko aikaa esillä koska toinen kissa söisi sitä liikaa. Eikä innosta jatkaa vahtimista, että toisella on ruokaa, mutta toinen ei pääse sitä syömään, eikä toisaalta aina ole paikallakaan vahtimassa. asialle täytynee siis jotain tehdä.

Toisella kissalla on valmiina ihon alla tunniste siru, voisikohan sitä käyttää? Olisikohan ideaa rakennella jonkinlainen automaatti, joka tunnistaa kissan sirusta tai ehkä väristä tms. ja antaisi syödä vain tietyn määrän tai tietystä astiasta. Tämä on vasta ihan Idea asteella oleva juttu, mutta katsellaan mitä tästä tulee.

Näköjään markkinoilta löytyy valmiitakin mm. MeowSpace ja Smarthome, mutta hintaa näkyy olevan sen verran, että ei tule kauppoja! ( mutta jotain mallia noista patentoiduista systeemeistä voisi kyllä ottaa!)

(6.2. 2017 Edit: vaihdettu toimimaton linkki toimivaan)

Omia ja muiden virheitä, mutta toimiva sarastevalo silti.

Joulu meni ja samoin uusivuosi. Edessä siis uudet kujeet, mutta jatketaan hetki viellä vanhoilla kuitenkin. Itead studiosilta tilatut piirilevyt saapuivat “joululoman” aikana.  Itead on erittäin edullinen piirilevyvalmistaja, tekee kuitenkin ihan kohtuullista jälkeä. Välistä kuitenkin on pieniä ongelmia. Kuvassa on lähikuva yhdestä toimitetusta piirilevystä, vihreässä juotteenestopinnoitteessa on ilmeisesti routterin tekemä jälki. Hassua sinällään, että itead toimitti tuon “rikkinäisenkin” levyn, koska pienin tilausmäärä heiltä on kymmenen levyä ja tuo rikkinäinen on yhdestoista.

Tinailin kytkennän kasaan ja poltin koodin atmega328p mikrocontrolleriin ja kas kummaa laite ei toimi! Ei muuta kuin tutkimaan missä vika on. Yllätys ei liene, että se löytyi penkin ja näppäimistön välistä.

Etukäteen oli jo tiedossa, että shift registerit on kytketty väärään järjestykseen piirilevylle, mutta muita yhtä alkeellisia virheitä löytyi levyltä lisääkin. Ts. A7D kytkimiin asetettu aika tulee väärin luettua. (03:45 tulee luettua 45:03) Onneksi kaikki “isot” virheet olivat sellaisia, että ne pystyi koodissa korjaamaan.

Ensimmäinen ongelma oli rotary encoderin kanssa, joka ei toiminut. Syyksi paljastui koodi ja fuse-bittien asettelu. Levylle laitettu pari vastusta ja kondensaattori per encoderin pinni estämään kytkinvärähtelyä, en kuitenkaan aikonut luottaa pelkästään tuohon kytkentään, joten koodissakin oli kytkinvärähtelyjä varten rivi. Kokeilin erillaisia viiveitä ja kaikilla viiveillä tilanne oli että, encoderi ei toiminut. Tilanne korjautui, kun jätti koko viive rivin pois koodista. Myöhemmin huomasin, että viiveet olivat kaiken kaikkiaan liian pitkiä ja syy siihen oli fuse-bittien tila. Koska käytin arduinon IDEä tähän projektiin luulin, että se asettaa fuse-bitit automaattisesti. Näköjään niitä ei aseteta automaattisesti ja mikrocontrolleri toimikin tehdasasetuksilla eli 1MHz taajuudella eikä 16MHz taajuudella niin kuin minä ja koodi olettivat. Kaikki delay-käskyt kestivät siis 16 kertaa pidempään kuin oli tarkoitus.

Seuraava ongelma oli, että sarastuksen asetus ei toiminut. Ongelman ratkaisemiseksi jouduin tekemään koodin, jolla asetettu aika välkyteltiin ledillä, koska systeemissä ei ole muuta näyttöä.  Levylle on kyllä suunniteltu I2C liitäntä näyttöä varten, mutta posti ei ole viellä tuonut tilaamaani I2C-kytkentäistä näyttöä Suomeen asti. Näillä näkymin kuitenkin jätän näytön kokonaan pois.

Ongelmaksi selvisi virhe piirilevyssä. IMG_20150109_233454  Kuvassa näkyy kytkimen kyljessä  numerot 1,2,4 ja 8, jotka kertovat bittien järjestyksen kytkintä luettaessa. Piirilevyllä vedot menevät päinvastaisessa järjestyksessä. Kytkimeen asetettu ykkönen (0b0001) siis tuli luettua numerona kahdeksan (0b1000). Yksi funktio koodiin lisää ja ongelma oli ratkaistu.

Kuvassa näkyy myös seuraava ongelma. Kissa pääsi leikkimään kytkimellä ja testasin vain mekaanisen toiminnan kytkimestä ennen kuin tinasin sen paikoilleen. Olisi kannattanut testata myös sähköinen toiminta. Kissan hammas oli sen verran painassut kytkimen sisuskaluja, että kytkin ei toiminut kunnolla ja jouduin tinaamaan sen irti. Onneksi olin tilannut yhden ylimääräisen, vaikka suhteellisen kalliita mokomat ovat!wpid-wp-1420882629588.jpeg

Kuva ei ole mitenkään selvä, mutta tarkkaan katsomalla siitä näkee, että alhaalta laskien toinen “liuku” on taipunut. Ehkä sen olisi saanut toimimaan, mutta kun oli toimiva kappalekin niin laitoin sen.

 

Koodissa on vielä tekemistä ja RTC-moduli IMG_20150112_012817(kuvassa keltainen) on kotelointia ajatellen aika hankalasti 90 asteen kulmassa alaspäin. Moduli on tinattu noin, koska etupuolelle tinattuna se olisi ollut ICSP liittimen tiellä. Tässä versiossa taidan vain vaihtaa/suoristaa pinnit ja asentaa modulin varsinaisen piirilevyn alle, mutta kaikkien virheiden takia taidan tehdä levystä version kaksi, jossa lisään RTC-modulin piirit suoraan pääpiirilevylle. Tällä hetkellä käytössä ds1307 piiriin prustuva RTC-moduli. Levyltä pitää lisäksi siirtää muutamia komponentteja hiukan, koska nyt ne ovat liian ahtaasti.

Laite siis kuitenkin toimii tällä hetkellä ja jo useampana aamuna olen herännyt helposti. RTC- moduli ei tosin tunnu olevan kovin tarkka, melkein minuutin per päivä heittää kello. Tarkemmin ajatellen itseasiassa kide taitaa olla suurin syyllinen kellon heittoon.

Pieniä harmaita aivosoluja sai kyllä koodatessa käyttää, kuten esimerkiksi miten asettaa RTC-kellon aika, kun laitteessa ei ole yhtään ainutta nappia? Vain A7D-kytkimet ja encoderi. Ratkaisu oli sitten kuitenkin aika yksinkertainen. Mikä tahansa ei kellon ajaksi sopiva asetus A7D kytkimissä, asettaa laitteen tilaan, jossa  kellonajan voi asettaa. A7D-kytkimiin laitetaan kellonaika ja encoderia pyöräyttämällä se siirretään RTC-chippiin. Muitakin asetuksia voinee laittaa vastaavalla menetelmällä, mutta katsotaan.

Lisäksi nälkä kasvaa syödessä! Alunperin oli tarkoitus tehdä valosta ihan oma yksikseen toimiva, mutta nyt mielessä on netin yli ohjauksen lisääminen masiinaan.  Samalla voisi käyttää NTP:tä hyväksi ja pitää sillä kellonaika oikeana.

Voin lähettää koodin ja eagle tiedostot sähköpostilla, jos joku niitä kaipaa. Tänne en niitä (viellä) laita, koska molemmissa on viellä tekemistä aika paljon.  edit: whatta heck!! laitetaan kuitenkin tarjolle vaan. Tuleepahan samalla opeteltua tuota GITHubin käyttöä. Lisäksi noita piirilevyjä on enemmän kuin minä tarvitsen, että niistäkin voidaan päästä sopuratkaisuun. Sarastevalo siis sinällään toimii, mutta en voi sanoa olevani viellä täysin tyytyväinen siihen.