¡Esta es una revisión vieja del documento!
Tabla de Contenidos
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
Por medio del puerto serie
http://pwiatrowski.com/technology/raspberry-pi-zero-esp8266-internet/
https://github.com/jeelabs/esp-link
Por medio de SPI
https://oshlab.com/esp8266-raspberry-pi-gpio-wifi/ Proyecto original https://hackaday.io/project/8678/instructions
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:
# 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)
}
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
/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
Luego arranque el servicio # netctl start wireless-home
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
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.
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)
#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);
}




