Lab_interaccio/2013/OSKOFF/SmartCitizenAmbient.h

170 lines
5.5 KiB
C
Raw Normal View History

2025-02-25 21:29:42 +01:00
/*
* Esta libreria esta basada en varias librerias, estas son:
* Las librerias para el modulo wifi, Arduino-wifly de furius-luke y WIFLYHQ de harlequin-tech
* La libreria para el sensor DHT22 de Ben Adams
* La libreria para el RTC basadas en el codigo de JeeLabs
* Busca la ultima version en https://github.com/fablabbcn/Smart-Citizen-Kit
*/
#ifndef SMARTCITIZENAMBIENT_h
#define SMARTCITIZENAMBIENT_h
#include <Arduino.h>
#include <Wire.h>
#include <avr/pgmspace.h>
#define debuggSCK false
//Direcciones I2C
#define DS1307_ADDRESS 0x68 // Direcion de la RTC
#define E2PROM 0x50 // Direcion de la EEPROM
#define MCP1 0x2F // Direcion del mcp1 MICS
#define MCP2 0x2E // Direcion del mcp2 REGULADORES
//Espacio reservado para los parametros de configuracion del SCK
#define EE_ADDR_SIGNATURE_CODE1 0 //1BYTE
#define EE_ADDR_SIGNATURE_CODE2 1 //1BYTE
#define EE_ADDR_SIGNATURE_CODE3 2 //1BYTE
#define EE_ADDR_SIGNATURE_CODE4 3 //1BYTE
#define EE_ADDR_CODE_MAYOR_VERSION 4 //1BYTE
#define EE_ADDR_CODE_MINOR_VERSION 5 //1BYTE
#define EE_ADDR_MAX_BATTERY 6 //1BYTE
#define EE_ADDR_FREE_ADDR_UPDATE_WEB 8 //2BYTE
#define EE_ADDR_FREE_ADDR_MEASURES 10 //2BYTE
//Espacio reservado para la configuracion de subida a la web
#define EE_ADDR_UPDATE_WEB 100
//Espacio reservado para los datos no posteados a la web
#define EE_ADDR_MEASURES 2000
//Valores por defecto
#define SIGNATURE_CODE1 23 // day
#define SIGNATURE_CODE2 03 // month
#define SIGNATURE_CODE3 20 // century
#define SIGNATURE_CODE4 13 // year of century
#define CODE_MAYOR_VERSION 0
#define CODE_MINOR_VERSION 4
#define VAL_MAX_BATTERY 840
#define FREE_ADDR_UPDATE_WEB EE_ADDR_UPDATE_WEB
#define FREE_ADDR_MEASURES EE_ADDR_MEASURES
#define TWI_FREQ 400000L //Frecuencia bus I2C
#define RO_MICS_5525 450 //Kohm segun tablas estadisticas del fabricante
#define RO_MICS_2710 3 //Kohm segun tablas estadisticas del fabricante
#define MICS_5525 0x00
#define MICS_2710 0x01
#define Rc 10. //Ohm
#define Vcc 5000. //mV
#define RES 256
#define R1 82 //Kohm
#define P1 100 //Kohm
//#define k 10 //float k= (RES*(float)R1/100)/1000; //Constante de conversion a tensión de los reguladores
//#define kr 10 //float kr= ((float)P1*1000)/RES; //Constante de conversion a resistencia de potenciometros
#define IO0 5 //MICS5525_HEATHER
#define IO1 13 //MICS2710_HEATHER
#define IO2 9 //MICS2710_ALTAIMPEDANCIA
#define S0 A4 //MICS_5525
#define S1 A5 //MICS_2710
#define S2 A2 //SENS_5525
#define S3 A3 //SENS_2710
#define S4 A0 //MICRO
#define S5 A1 //LDR
#define AWAKE 4 //Despertar WIFI
#define FACTORY 7 //Despertar WIFI
#define PANEL A8 //Entrada panel
#define BAT A7 //Entrada bateria
#define DHT22_PIN 10 //Entrada/Salida DHT22
#define DHT22_ERROR_VALUE -995
#define SCAN_SSID_BUFFER_SIZE 33 //
#define OPEN "0"
#define WEP "1"
#define WPA1 "2"
#define WPA2 "4"
#define WEP64 "8"
#define EXT_ANT "1" // antena externa
#define INT_ANT "0" // antena interna
class ClockTime {
public:
byte year;
byte month;
byte day;
byte hours;
byte minutes;
byte seconds;
};
class SmartCitizen {
public:
void begin();
void RTCadjust(ClockTime time);
void RTCtime();
void writeEEPROM(unsigned int eeaddress, byte data );
byte readEEPROM(unsigned int eeaddress );
char* readCommand(unsigned int eeaddress, unsigned int *pointer );
void writeCommand(unsigned int eeaddress, char* text );
int decimal(float temp);
void DHT22(uint8_t pin);
boolean dhtRead();
float getTemperatureC();
float getHumidity();
float getNO2();
float getCO();
float getPanel();
float getBattery();
float getLight();
float getNoise();
float getMICS(unsigned long time0, unsigned long time1);
/*Wifi*/
void config(char* ssid, char* pass, char* auth, char* antenna);
boolean wifi_ready();
const char * ip();
ClockTime WIFItime();
boolean sleep();
boolean open(const char *addr, int port=80);
boolean close();
boolean enterCommandMode();
boolean exitCommandMode();
boolean isConnected();
private:
uint8_t _bitmask;
volatile uint8_t *_baseReg;
unsigned long _lastReadTime;
short int _lastHumidity;
short int _lastTemperature;
float average(int anaPin);
float mapfloat(long x, long in_min, long in_max, long out_min, long out_max);
void writeMCP(byte deviceaddress, byte address, int data );
int readMCP(int deviceaddress, byte address );
void VH_MICS(byte device, long voltage );
float readVH(byte device);
void RL_MICS(byte device, long resistor);
uint8_t bcd2bin (uint8_t val);
uint8_t bin2bcd (uint8_t val);
/*Wifi*/
boolean connected;
boolean findInResponse(const char *toMatch, unsigned int timeOut);
void skipRemainderOfResponse();
boolean sendCommand(const char *command,
boolean isMultipartCommand, // Has default value
const char *expectedResponse); // Has default value
boolean sendCommand(const __FlashStringHelper *command,
boolean isMultipartCommand, // Has default value
const char *expectedResponse); // Has default value
};
#endif