ESP8266


Hvad er ESP8266?

Her er vist et ESP01 modul samt tilslutning til RS232.


Her er vist et ESP12 modul og de pin numre man bruger med nodeMCU firmware.

En ESP8266 er et lille modul, der har indbygget µP og nogle I/O pins, samt netværk antenne. Nogle med onboard og andre med ext. antenne.
Jeg har lavet en lille test med et ESP-12 modul med intern antenne. Dette stod i vores udestue.
Jeg gik ca 500m ned af vejen, der kunne jeg stadig nå modulet, efter ca 600m blev det dog meget ustabil.

Antallet at udgange varier alt efter hvilken type man vælger.
PT findes der en model ESP01 der har 2 I/O pinde op til en ESP12 der har 9 I/O pinde samt en ADC.

En ESP har desuden trådløst netværk og nogle af modellerne har også selv antenne på printet.
Det trådløse netværk kan konnekte til et acces point (AP), eller selv funger som et AP.
Et ESP modul kører på 1V8 til 3V5 og er IKKE 5v tolerant.

Mange af I/O pindene kan man selv konfigurer til In/out/pwm/int/i2c/ow.

For at "tale" med ESP modulet, benytter man RS232 (Husk igen max 3v5). (TX/RX/GND/VSS er nok)
Man kan så sende AT kommandoer til ESP modulet, lige som de gamle Modems.

Via RS232 kan man også lægge nyt Firmware i chippen, og der er mange muligheder.
SDK / API er frit tilgængeligt.

Jeg har lagt firmware fra nodemcu.com ind på et af mine moduler, som jeg bruger til at styre mit Canon 1200D med.

I denne firmware har man rigtig mange muligheder, bla timer (dem har man 7 af på et ESP12 modul, ved ikke med de andre moduler)

Bl.a kan man have et GPIO trigger, som trigger en function man har lavet i programmet. Der kan man f.eks trigger på at signalet går høj eller lavt eller begge, se manualen til programmet. (Link i bunden af artiklen.)
At lægge "programmer" i modulet er meget simpel, det er tekstfiler man uploader til/i modulet, til dette bruger jeg et program der hedder "Lua Uploader"
Lægger man en fil op der hedder init.lua, vil denne fil blive udføret når modulet starter op.
init.lua kunne f.eks indeholde connection til dit AP, en webserver eller eller......

Mulighederne er rigtig rigtig mange så det er bare med at komme igang.

Du kan f.eks anvende dem til at checke om en pumpe kører, tænde lys udenfor, åbne din garage port, kører et films lærred ned. Eller som jeg bruger det til nemlig min timelabs / slæde til mit kamera.
Du kan f.eks sætte MCP23S17 på modulet, Eller også MCP23017, hvilke type kommunikation du vil bruge, bestemmer du selv og du kan også sagtens kører et mix af dem, så længe du vælger et modul med I/O pins nok, så har du masse af I/O pins.
Ja mulighederne er mange.

Og ja det hele kan jo fødes af et par AA batterier, alt efter strøm forbruge.

Et ESP12 modul har 512Kb "harddisk" og ca 18Kb ram, løber derud af med 40MHz. Så det er en kraftig lille sag.
Prisen for et modul er mellem 20 og 30 Kr. alt efter model og antal man køber.

Det er så sejt et modul, at jeg er kommet til at bestille 10 mere af dem, da jeg vil bruge dem til OpenHab (søg evt på Google), da var prisen nede på ca 15 kr. stykket (Med konverter print, da modulet (ESP12) har 2mm spacing mellem benene.)

Kode til at læse en lm75.
Kode:
lm75 = {
  address = 71,
  temp_reg = 0,
  
  init = function (self, sda, scl)
           self.bus = 0
           i2c.setup(self.bus, sda, scl, i2c.SLOW)
  end,

  read = function (self)
           i2c.start(self.bus)
           i2c.address(self.bus, self.address, i2c.TRANSMITTER)
           i2c.write(self.bus, self.temp_reg)
           i2c.stop(self.bus)

		   i2c.start(self.bus)
           i2c.address(self.bus, self.address + 1, i2c.RECEIVER)
           c=i2c.read(self.bus, 2)
           i2c.stop(self.bus)
           return c
  end,
  
  convert = function (self, msb, lsb)
              if msb > 127 then msb = msb - 255 end
              return msb, bit.band(bit.rshift(lsb, 5), 7)
  end,

  strTemp = function (self)
              local h, l
              h, l = string.byte(self:read(), 1, 2)
              return string.format("%d.%d", self:convert(h, l))
  end,

  intTemp = function (self)
              local h, l
              h, l = string.byte(self:read(), 1, 2)
              return tonumber(string.format("%d%d", self:convert(h, l)))
  end
}

Her er to eksempler på hvordan man kan bruge modulerne.
Disse er eksempler fra sakset fra http://nodemcu.com/index_en.html

HTTP server
Kode:
             
-- a simple http server
srv=net.createServer(net.TCP) 
srv:listen(80,function(conn) 
    conn:on("receive",function(conn,payload) 
    print(payload) 
    conn:send("<h1> Hello, NodeMcu.</h1>")
    end) 
end)



Interfacing with sensor

Kode:
              
-- read temperature with DS18B20
t=require("ds18b20")
t.setup(9)
addrs=t.addrs()
-- Total DS18B20 numbers, assume it is 2
print(table.getn(addrs))
-- The first DS18B20
print(t.read(addrs[1],t.C))
print(t.read(addrs[1],t.F))
print(t.read(addrs[1],t.K))
-- The second DS18B20
print(t.read(addrs[2],t.C))
print(t.read(addrs[2],t.F))
print(t.read(addrs[2],t.K))
-- Just read
print(t.read())
-- Just read as centigrade
print(t.read(nil,t.C))
-- Don't forget to release it after use
t = nil
ds18b20 = nil
package.loaded["ds18b20"]=nil

Til mit eget danske forum, kun for ESP moduler, Raspberry, Banana og PIC kredse
http://www.shoppinglist.nu

Nogle af de sider jeg bruger.
Quick guide til modulet.
http://benlo.com/esp8266/esp8266QuickStart.html

Firmware jeg bruger.
https://github.com/nodemcu

Doc til firmwaren.
https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en

Dybte gående information.
https://nurdspace.nl/ESP8266#Technical_Overview

Layout af et ESP12 modul
http://shoppinglist.nu/esp12/pin_map-esp-12.png

Billede af sidste indkøbt ESP12 moduler
https://www.google.dk/search?q=ESP12&source=lnms&tbm=isch&sa=X&ei=PvkXVaPBC5DSaMXUgKAD&ved=0CAgQ_AUoAg&biw=1189&bih=599#imgdii=_&imgrc=wXjshrC3GGuEIM%253A%3B6fLMc7SiiHAYUM%3Bhttp%253A%252F%252Fpietrushnic.github.io%252Fassets%252Fimages%252Fesp-12-soldered.jpg%3Bhttp%253A%252F%252Fpietrushnic.github.io%252Fblog%252F2015%252F01%252F24%252Fpower-on-of-esp-12%3B2592%3B1944
Nu er det muligt at programmer et esp8266 modul direkte via Arduino IDE :-)
Det må da være godt nyt til alle dem der bruger Arduino :-)

Du kan læse meget mere om det her http://hackaday.com/2015/03/18/how-to-directly-program-an-inexpensive-esp8266-wifi-module/