documentacion-proceso:tecnologicos:taller-esp8266
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previaÚltima revisiónAmbos lados, revisión siguiente | ||
documentacion-proceso:tecnologicos:taller-esp8266 [2016/03/10 04:58] – [NodeMCU - LUA] brolin | documentacion-proceso:tecnologicos:taller-esp8266 [2016/03/12 21:32] – [Relevo wifi] miguel | ||
---|---|---|---|
Línea 14: | Línea 14: | ||
* protoboard (AGREGAR IMAGEN) | * protoboard (AGREGAR IMAGEN) | ||
* soldador (AGREGAR IMAGEN) | * soldador (AGREGAR IMAGEN) | ||
- | * un computador con arduino instalado (AGREGAR IMAGEN) | + | * un computador con arduino instalado |
* ESP12 (AGREGAR IMAGEN) | * ESP12 (AGREGAR IMAGEN) | ||
* pcb para ESP12 (AGREGAR IMAGEN) | * pcb para ESP12 (AGREGAR IMAGEN) | ||
Línea 46: | Línea 46: | ||
**What is this ESP8266** | **What is this ESP8266** | ||
- | | + | * It's a wireless SoC |
- | It has GPIO, I2C, ADC, SPI, PWM and some more | + | |
- | It's running at 80MHz | + | |
- | 64KBytes of instruction RAM | + | |
- | 96KBytes of data RAM | + | |
- | 64KBytes boot ROM | + | |
- | It has a Winbond W25Q40BVNIG SPI flash | + | |
- | It's a RISC architecture | + | |
- | The core is a 106micro Diamond Standard core (LX3) made by Tensilica | + | |
- | The ESP8266 chip is made by Espressif | + | |
- | Modules bearing this chip are made by various manufacturers | + | |
**Features** | **Features** | ||
- | 802.11 b/g/n protocol | + | * 802.11 b/g/n protocol |
- | Wi-Fi 2.4 GHz, support WPA/WPA2 | + | |
- | Super small module size (11.5mm x 11.5mm) | + | |
- | Integrated 10-bit ADC | + | |
- | Integrated TCP/IP protocol stack (ipv4 only at the moment) | + | |
- | Integrated TR switch, balun, LNA, power amplifier and matching network Integrated PLL, regulators, and power management units | + | |
- | +20dBm output power in 802.11b mode | + | |
- | Supports antenna diversity | + | |
- | Deep sleep power <10uA, Power down leakage current < 5uA | + | |
- | Integrated low power 32-bit MCU | + | |
- | SDIO 2.0, SPI, UART, I2C | + | |
- | STBC, 1x1 MIMO, 2x1 MIMO | + | |
- | A-MPDU & A-MSDU aggregation & 0.4μs guard interval | + | |
- | Wake up and transmit packets in < 2ms | + | |
- | Standby power consumption of < 1.0mW (DTIM3) | + | |
- | Operating temperature range -40C ~ 125C | + | |
- | + | | |
- | | + | |
- | + | ||
- | + | ||
- | + | ||
===== 2. ¿Cómo se programa? ===== | ===== 2. ¿Cómo se programa? ===== | ||
Línea 95: | Línea 90: | ||
The best place to ask questions related to this core is ESP8266 community forum: http:// | The best place to ask questions related to this core is ESP8266 community forum: http:// | ||
+ | |||
+ | ==== AT Firmware ==== | ||
+ | |||
+ | Manipulación del ESP8266 mediante comandos AT -> http:// | ||
+ | Para descargar el firmare binario -> https:// | ||
==== NodeMCU - LUA ==== | ==== NodeMCU - LUA ==== | ||
Línea 124: | Línea 124: | ||
==== MicroPython - Python ==== | ==== MicroPython - Python ==== | ||
+ | |||
+ | http:// | ||
+ | |||
+ | MicroPython is a lean and fast implementation of the Python 3 programming language that is optimised to run on a microcontroller. The MicroPython board is a small electronic circuit board that runs MicroPython on the bare metal, and gives you a low-level Python operating system that can be used to control all kinds of electronic projects. | ||
==== Smart.js - Javascript ==== | ==== Smart.js - Javascript ==== | ||
- | ==== Sming - C ==== | + | https:// |
+ | Smart.js is a generic, cross-platform, | ||
+ | ==== Sming - C++ ==== | ||
+ | |||
+ | https:// | ||
+ | |||
+ | Sming - Open Source framework for high efficiency WiFi SoC ESP8266 native development with C++ language. | ||
+ | |||
+ | **Summary** | ||
+ | |||
+ | * Fast & user friendly development | ||
+ | * Work with GPIO in Arduino style | ||
+ | * High effective in perfomance and memory usage (this is native firmware!) | ||
+ | * Compatible with standard Arduino libraries - use any popular hardware in few lines of code | ||
+ | * rBoot OTA firmware updating | ||
+ | * Built-in file system: spiffs | ||
+ | * Built-in powerfull network and wireless modules | ||
+ | * Built-in JSON library: ArduinoJson | ||
+ | * HTTP, AJAX, WebSockets support | ||
+ | * MQTT protocol based on libemqtt | ||
+ | * Networking based on LWIP stack | ||
+ | * Simple and powerfull hardware API wrappers | ||
+ | * Based on Espressif NONOS SDK 1.4.0 & 1.5.0 | ||
===== 3. Montaje de un programador para el ESP-12 ===== | ===== 3. Montaje de un programador para el ESP-12 ===== | ||
+ | |||
+ | El esquema que se muestra a continuación es utilizado para programar el ESP12, se debe tener el cuenta en cuenta que los pines **GPIO2** y **GPIO0** (cables morados en el esquema de la protoboard) se conectan de manera temporal mientras se programa. Para poner a funcionar el ESP-12 en modo de ejecución de programa estos dos pines deben ser desconectados. Adicionalmente es necesario agregar un cable al pin **REST** (reset - cable verde en el esquema de la protoboard) que justo en el momento que se está subiendo el programa desde el IDE de Arduino, se debe hacer contacto con **GND** para resetear el integrado. | ||
{{http:// | {{http:// | ||
+ | {{: | ||
{{: | {{: | ||
- | ===== 4. Ejemplo | + | ===== 4. Ejemplos ===== |
+ | |||
+ | ==== LED-Blink | ||
+ | |||
+ | El builtin led para el ESP-12 no es el mismo que está definido dentro del código de arduino. Se debe renombrar esta variable y usar el **pin 2**. A continuación se muestra el código probado con la modificación mencionada. | ||
+ | |||
+ | <code c++> | ||
+ | /* | ||
+ | | ||
+ | Blink the blue LED on the ESP-01 module | ||
+ | This example code is in the public domain | ||
+ | |||
+ | The blue LED on the ESP-01 module is connected to GPIO1 | ||
+ | (which is also the TXD pin; so we cannot use Serial.print() at the same time) | ||
+ | |||
+ | Note that this sketch uses BUILTIN_LED to find the pin with the internal LED | ||
+ | */ | ||
+ | |||
+ | #define LED 2 | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(LED, | ||
+ | } | ||
+ | |||
+ | // the loop function runs over and over again forever | ||
+ | void loop() { | ||
+ | digitalWrite(LED, | ||
+ | // but actually the LED is on; this is because | ||
+ | // it is acive low on the ESP-01) | ||
+ | delay(1000); | ||
+ | digitalWrite(LED, | ||
+ | delay(2000); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Relevo wifi ==== | ||
+ | |||
+ | La idea es programar el ESP8266 para que de manera remota a través de una petición a un servidor web que se crea dentro del chip se encienda o se apage un pin. El código a continuación es tomado del ejemplo **WifiWebServer** de Arduino para ESP8266. Probamos usando el **pin GPIO2** para activar el relevo pero presentaba problemas con la conexión a la red. Lo cambiamos para el **pin GPIO4** | ||
+ | |||
+ | <code c> | ||
+ | /* | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | */ | ||
+ | |||
+ | #include < | ||
+ | |||
+ | const char* ssid = " | ||
+ | const char* password = " | ||
+ | |||
+ | // Create an instance of the server | ||
+ | // specify the port to listen on as an argument | ||
+ | WiFiServer server(80); | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(115200); | ||
+ | delay(10); | ||
+ | |||
+ | // prepare GPIO2 | ||
+ | pinMode(4, OUTPUT); | ||
+ | digitalWrite(4, | ||
+ | |||
+ | // Connect to WiFi network | ||
+ | Serial.println(); | ||
+ | Serial.println(); | ||
+ | Serial.print(" | ||
+ | Serial.println(ssid); | ||
+ | |||
+ | WiFi.begin(ssid, | ||
+ | |||
+ | while (WiFi.status() != WL_CONNECTED) { | ||
+ | delay(500); | ||
+ | Serial.print(" | ||
+ | } | ||
+ | Serial.println("" | ||
+ | Serial.println(" | ||
+ | |||
+ | // Start the server | ||
+ | server.begin(); | ||
+ | Serial.println(" | ||
+ | |||
+ | // Print the IP address | ||
+ | Serial.println(WiFi.localIP()); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | // Check if a client has connected | ||
+ | WiFiClient client = server.available(); | ||
+ | if (!client) { | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | // Wait until the client sends some data | ||
+ | Serial.println(" | ||
+ | while(!client.available()){ | ||
+ | delay(1); | ||
+ | } | ||
+ | |||
+ | // Read the first line of the request | ||
+ | String req = client.readStringUntil(' | ||
+ | Serial.println(req); | ||
+ | client.flush(); | ||
+ | |||
+ | // Match the request | ||
+ | int val; | ||
+ | if (req.indexOf("/ | ||
+ | val = 0; | ||
+ | else if (req.indexOf("/ | ||
+ | val = 1; | ||
+ | else { | ||
+ | Serial.println(" | ||
+ | client.stop(); | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | // Set GPIO2 according to the request | ||
+ | digitalWrite(4, | ||
+ | |||
+ | client.flush(); | ||
+ | |||
+ | // Prepare the response | ||
+ | String s = " | ||
+ | s += (val)?" | ||
+ | s += "</ | ||
+ | |||
+ | // Send the response to the client | ||
+ | client.print(s); | ||
+ | delay(1); | ||
+ | Serial.println(" | ||
+ | |||
+ | // The client will actually be disconnected | ||
+ | // when the function returns and ' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | {{https:// | ||
+ | |||
+ | |||
+ | |||
+ | ===== Registro | ||
- | #define LED_BUILTIN 2 | + | {{: |
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
- | gpio15 no se desconecta de tierra |