Herramientas de usuario

Herramientas del sitio


proyectos:talleres_esp:upayakuwasi

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
proyectos:talleres_esp:upayakuwasi [2018/03/20 23:39] – [Conexión de wifi para raspberrypi vía esp8266] brolinproyectos:talleres_esp:upayakuwasi [2018/03/26 18:19] (actual) kz
Línea 1: Línea 1:
 ====== Talleres en UPAYAKUWASI - Cayambe, Ecuadro ====== ====== Talleres en UPAYAKUWASI - Cayambe, Ecuadro ======
 +
 +===== Contenido =====
 +  - Introducción de los espacios (upayakuwasi-un/loquer)
 +  - Presentación de participantes y expectativas
 +  - Uso y adaptación a recursos naturales (Caminata por UPAYAKUWASI)
 +  - Introducción a electrónica, sensores y actuadores
 +  - Control de Entradas y Salidas
 +  - ESP8266
 +  - Arduino
 +  - Sensor humedad
 +  - Sensor temperatura y humedad
 +  - Sensor luz
 +  - Actuador relevo
 +  - Práctica
 +
 +===== Taller Mujeres =====
 +
 +http://piratepad.net/unloquerupayakuwasi
 +
 +  - Taller en 4 capas
 +  - Riego, Automatización Válvulas, Sensores, Plataforma
 +  - Primera capa: (Analógico) Ellas dibujan sus huertos, ¿de donde sacan el agua?, ¿cuáles válvulas prenden?, ¿A qué horas?, presentan al resto 
 +  - Segunda capa: (Automatización abrir cerrar válvulas) Se programan tiempos para abrir válvulas
 +  - Tercer capa: (¿qué pasa si llueve?, necesito saber que ya no tengo que regar) Cuáles son los sensores, ¿cómo se programan?
 +  - Cuarta capa: (Afinación y plataforma de control)
 +
 +¿Qué es lo que se llevan? -> Relevo con ESP8266
 +
 +Cada etapa tiene que tener su presupuesto.
 +
  
 ===== Conexión de wifi para raspberrypi vía esp8266 ===== ===== Conexión de wifi para raspberrypi vía esp8266 =====
Línea 14: Línea 44:
 {{http://www.raspberry-pi-geek.com/var/rpi/storage/images/media/images/raspib-gpio/12356-1-eng-US/RasPiB-GPIO_reference.png?600}} {{http://www.raspberry-pi-geek.com/var/rpi/storage/images/media/images/raspib-gpio/12356-1-eng-US/RasPiB-GPIO_reference.png?600}}
  
-{{:proyectos:talleres_esp:20180320_181149.jpg?300}} +{{:proyectos:talleres_esp:20180320_181149.jpg?400}} 
-{{:proyectos:talleres_esp:20180320_181158.jpg?300}}+{{:proyectos:talleres_esp:20180320_181158.jpg?400}
 + 
 +Para instalar el driver en archlinux-arm nos basamos en el paquete https://aur.archlinux.org/packages/esp8089-git/ pero se modifica el PKGBUILD como se muestra a continuación: 
 + 
 +<code> 
 +# Maintainer: Swift Geek 
 +# TODO: DKMS 
 + 
 +_gitname=esp8089 
 +pkgname=$_gitname-git 
 +pkgver=2016.08.07 
 +pkgrel=1 
 +pkgdesc="Linux kernel module driver for the ESP8089 WiFi chip" 
 +arch=('i686' 'x86_64' 'armv7h' 'armv6h'
 +url="https://github.com/al177/$_gitname" 
 +license=('GPL'
 +install=$_gitname.install 
 +depends=('linux'
 +makedepends=('git' 'linux-headers'
 +options=(!strip) 
 +source=("git+${url}.git"
 + 
 +md5sums=('SKIP'
 + 
 +pkgver() { 
 +   cd "$srcdir/$_gitname" 
 +   git log -1 --format="%cd" --date=short | sed 's|-|.|g' 
 +
 + 
 +prepare() { 
 +   sed -i s/RX_FLAG_HT/RX_ENC_HT/ esp8089/esp_sip.c 
 +   sed -i s/RX_FLAG_SHORT_GI/RX_ENC_FLAG_SHORT_GI/ esp8089/esp_sip.c 
 +
 + 
 +build() { 
 +   cd "$srcdir/$_gitname/" 
 +   make modules M=../$_gitname CONFIG_ESP8089=m 
 +   gzip -f esp8089.ko 
 +
 + 
 +package() { 
 +   cd "$srcdir/$_gitname/" 
 +   install -Dm644 esp8089.ko.gz "$pkgdir/usr/lib/modules/$(uname -r)/kernel/drivers/net/wireless/esp8089.ko.gz" 
 +   #depmod -a $(uname -r) 
 +
 +</code> 
 + 
 +una vez instalado el paquete se instala el módulo con ''sudo modprobe esp8089'' 
 + 
 +Para configurar la red inalámbrica se usa ''netctl'' como dice acá https://raspberrypi.stackexchange.com/questions/7987/wifi-configuration-on-arch-linux-arm#7992 
 + 
 +<code> 
 +/etc/netctl# install -m640 examples/wireless-wpa wireless-home 
 +/etc/netctl# cat wireless-home 
 +Description='A simple WPA encrypted wireless connection' 
 +Interface=wlan0 
 +Connection=wireless 
 +Security=wpa 
 + 
 +IP=dhcp 
 + 
 +ESSID='MyNetwork' 
 +# Prepend hexadecimal keys with \" 
 +# If your key starts with ", write it as '""<key>"' 
 +# See also: the section on special quoting rules in netctl.profile(5) 
 +Key='WirelessKey' 
 +# Uncomment this if your ssid is hidden 
 +#Hidden=yes 
 +</code> 
 + 
 +Luego arranque el servicio ''# netctl start wireless-home'' 
 + 
 +FIXME 
 +Tenemos problemas con la asignación de dirección ip por dhcpd, relacionado con timeouts\\ 
 +https://wiki.archlinux.org/index.php/Netctl#Troubleshooting\\ 
 +https://bbs.archlinux.org/viewtopic.php?pid=1399842#p1399842\\ 
 +https://archlinuxarm.org/forum/viewtopic.php?f=31&t=5424\\ 
 +FIXME 
 + 
 +===== RTC digital por medio de la libreria Time para ESP8266 ===== 
 + 
 +Básicamente la libreria funciona por alarmas y temporizadores. Una **Alarma** es una tarea que ocurre a determinada hora del día. Mientras que un **temporizador** es una tarea programada que ocurré **después** de que haya pasado algún intervalo de tiempo. 
 + 
 +[[https://github.com/PaulStoffregen/TimeAlarms|repositorio]] 
 + 
 +<WRAP center round info 60%> 
 +Muy importante recordar que en vez de usar el delay(algunvalor) de Arduino, se debe usar el de la libreria alarm. De esta manera: Alarm.delay(algunvalor) 
 +</WRAP> 
 + 
 +<code languaje="c++"> 
 +#include <Time.h> 
 +#include <TimeAlarms.h> 
 + 
 +int pin = D1; 
 +int hora, minutos; 
 +int alarma; 
 + 
 +void setup() { 
 +  Serial.begin(9600); 
 +  hora = 8; 
 +  minutos = 1; 
 +  //fijamos el tiempo el Domingo 25 de marzo del 2018 a las 1:40 pm 
 +  setTime(hora,0,0,3,25,18); 
 +  //Creamos las alarmas 
 +  Alarm.alarmRepeat(hora,minutos,0,prenderSensorRiegoManana);  // 8:30am cada día 
 +  Alarm.alarmRepeat(hora,minutos + 3,0,apagarSensorRiegoManana);  // 8:30am cada día 
 +   
 +  //Alarm.alarmRepeat(17,45,0,EveningAlarm); // 5:45pm cada día 
 +  //Alarm.alarmRepeat(dowSaturday,8,30,30,WeeklyAlarm); // 8:30:30 cada sabado 
 + 
 +  //alarma = 15; 
 +  //Alarm.timerRepeat(alarma, Repeats); // Timer cada 15 segundos 
 +  //Alarm.timerOnce(10, OnceOnly);  // Llamado una vez despues de 10 segundos 
 +  pinMode(pin, OUTPUT); 
 +  digitalWrite(pin, LOW);   
 +
 + 
 +void loop() { 
 +  digitalClockDisplay(); 
 +  Alarm.delay(1000); 
 +
 + 
 +// funciones para llamar cuando se dispara una alarma 
 +void prenderSensorRiegoManana(){ 
 +  Serial.println("Alarm: - turn lights on");   
 +  digitalWrite(pin, HIGH);   
 +
 + 
 +void apagarSensorRiegoManana(){ 
 +  Serial.println("Alarm: - turn lights off");  
 +  digitalWrite(pin, LOW);    
 +
 + 
 +void EveningAlarm(){ 
 +  Serial.println("Alarm: - turn lights on");            
 +
 + 
 +void WeeklyAlarm(){ 
 +  Serial.println("Alarm: - its Monday Morning");       
 +
 + 
 +void ExplicitAlarm(){ 
 +  Serial.println("Alarm: - this triggers only at the given date and time");        
 +
 + 
 +void Repeats(){ 
 +  Serial.println("Activo la Alarma");   
 +  digitalWrite(pin, HIGH); 
 +  Alarm.delay(5000); 
 +  digitalWrite(pin, LOW); 
 +  Alarm.delay(1000); 
 +
 + 
 +void OnceOnly(){ 
 +  Serial.println("This timer only triggers once");   
 +
 + 
 +void digitalClockDisplay() 
 +
 +  // digital clock display of the time 
 +  Serial.print(hour()); 
 +  printDigits(minute()); 
 +  printDigits(second()); 
 +  Serial.println();  
 +
 + 
 +void printDigits(int digits) 
 +
 +  Serial.print(":"); 
 +  if(digits < 10) 
 +    Serial.print('0'); 
 +  Serial.print(digits); 
 +
 + 
 +void prendaSensor(){ 
 +  pinMode(pin, HIGH); 
 +
 + 
 +void apagueSensor(){ 
 +  pinMode(pin, LOW); 
 +
 + 
 + 
 +</code> 
 + 
 +===== Código para activar algo desde una página web con ESP8266 ===== 
 + 
 +Este código genera una página web para controlar el encendido o apagado de algún dispositivo. 
 + 
 +<code> 
 + 
 +#include <ESP8266WiFi.h> 
 +  
 +const char* ssid = "UPAYAKUWASI"; 
 +const char* password = "nosotrxs"; 
 +  
 +int ledPin = D1; // GPIO13 
 +WiFiServer server(80); 
 +  
 +void setup() { 
 +  Serial.begin(115200); 
 +  delay(10); 
 +  
 +  pinMode(ledPin, OUTPUT); 
 +  digitalWrite(ledPin, LOW); 
 +  
 +  // Connect to WiFi network 
 +  Serial.println(); 
 +  Serial.println(); 
 +  Serial.print("Connecting to "); 
 +  Serial.println(ssid); 
 +  
 +  WiFi.begin(ssid, password); 
 +  
 +  while (WiFi.status() != WL_CONNECTED) { 
 +    delay(500); 
 +    Serial.print("."); 
 +  } 
 +  Serial.println(""); 
 +  Serial.println("WiFi connected"); 
 +  
 +  // Start the server 
 +  server.begin(); 
 +  Serial.println("Server started"); 
 +  
 +  // Print the IP address 
 +  Serial.print("Use this URL to connect: "); 
 +  Serial.print("http://"); 
 +  Serial.print(WiFi.localIP()); 
 +  Serial.println("/"); 
 +  
 +
 +  
 +void loop() { 
 +  // Check if a client has connected 
 +  WiFiClient client = server.available(); 
 +  if (!client) { 
 +    return; 
 +  } 
 +  
 +  // Wait until the client sends some data 
 +  Serial.println("new client"); 
 +  while(!client.available()){ 
 +    delay(1); 
 +  } 
 +  
 +  // Read the first line of the request 
 +  String request = client.readStringUntil('\r'); 
 +  Serial.println(request); 
 +  client.flush(); 
 +  
 +  // Match the request 
 +  
 +  int value = LOW; 
 +  if (request.indexOf("/LED=ON") != -1)  { 
 +    digitalWrite(ledPin, HIGH); 
 +    value = HIGH; 
 +  } 
 +  if (request.indexOf("/LED=OFF") != -1)  { 
 +    digitalWrite(ledPin, LOW); 
 +    value = LOW; 
 +  } 
 +  
 +// Set ledPin according to the request 
 +//digitalWrite(ledPin, value); 
 +  
 +  // Return the response 
 +  client.println("HTTP/1.1 200 OK"); 
 +  client.println("Content-Type: text/html"); 
 +  client.println(""); //  do not forget this one 
 +  client.println("<!DOCTYPE HTML>");https://processing.org/download/ 
 +  client.println("<html>"); 
 +  
 +  client.print("<h1>Su dispositivo ahora esta: </h1>"); 
 +  
 +  if(value == HIGH) { 
 +    client.print("On"); 
 +  } else { 
 +    client.print("Off"); 
 +  } 
 +  client.println("<br><br>"); 
 +  client.println("<a href=\"/LED=ON\"\"><button>Prender </button></a>"); 
 +  client.println("<a href=\"/LED=OFF\"\"><button>Apagar </button></a><br />");   
 +  client.println("</html>"); 
 +  
 +  delay(1); 
 +  Serial.println("Client disonnected"); 
 +  Serial.println(""); 
 +  
 +}
  
 +</code>
  
proyectos/talleres_esp/upayakuwasi.1521589182.txt.gz · Última modificación: 2018/03/20 23:39 por brolin