mbed Weather Platform firmware http://mbed.org/users/okini3939/notebook/mbed-weather-platform-firmware/

Dependencies:   ChaNFSSD EthernetNetIf I2CLEDDisp Agentbed ChaNFSUSB ILinterpreter mbed BMP085 WeatherMeters ConfigFile ChaNFS I2CLCD

Committer:
okini3939
Date:
Fri Mar 16 15:26:46 2012 +0000
Revision:
8:bed0b81794ba
Parent:
7:f7c98d836f81

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 1:6c7141895545 1 /*
okini3939 1:6c7141895545 2 * Weather Station - mbed Weather Platform
okini3939 1:6c7141895545 3 * Copyright (c) 2011 Hiroshi Suga
okini3939 1:6c7141895545 4 * Released under the MIT License: http://mbed.org/license/mit
okini3939 1:6c7141895545 5 */
okini3939 1:6c7141895545 6
okini3939 1:6c7141895545 7 /** @file
okini3939 1:6c7141895545 8 * @brief Weather Station
okini3939 1:6c7141895545 9 */
okini3939 1:6c7141895545 10
okini3939 0:bdb53686c194 11 #include "mbed.h"
okini3939 0:bdb53686c194 12 #include "ConfigFile.h"
okini3939 0:bdb53686c194 13 #include "EthernetNetIf.h"
okini3939 2:a3e5edf84f74 14 #include "I2CLCD.h"
okini3939 0:bdb53686c194 15
okini3939 3:058292da2cee 16 #undef DEBUG
okini3939 1:6c7141895545 17
okini3939 5:90f840432195 18 #define PCB_LOT 0 // PCB version 0:i, 1:ro, 2:ha
okini3939 4:46ad190e6328 19
okini3939 4:46ad190e6328 20 #define REG_LIGHT 1 // k ohm
okini3939 4:46ad190e6328 21 #define REG_UV 100 // k ohm
okini3939 4:46ad190e6328 22 #define REG_MOIST 10 // k ohm
okini3939 0:bdb53686c194 23
okini3939 0:bdb53686c194 24 #define USE_IL // IL interpreter
okini3939 2:a3e5edf84f74 25 #define USE_USB // USB memory
okini3939 2:a3e5edf84f74 26 #define USE_DISPLAY // I2C LCD, LED display module
okini3939 2:a3e5edf84f74 27 #define USE_HTTP // HTTP Client (Weather Stations, Pachube, Twitter)
okini3939 0:bdb53686c194 28 #define USE_NTP // NTP Client
okini3939 0:bdb53686c194 29 #undef USE_SNMP // SNMP Agent
okini3939 3:058292da2cee 30 #define USE_EMAIL // send mail
okini3939 0:bdb53686c194 31
okini3939 1:6c7141895545 32 #if PCB_LOT >= 1
okini3939 1:6c7141895545 33 #define USE_3LED // 3 leds level meter
okini3939 1:6c7141895545 34 #define USE_SD_INS // SD card insert sw
okini3939 1:6c7141895545 35 #define USE_EXINOUT // 2 input, 2 output
okini3939 1:6c7141895545 36 #endif
okini3939 1:6c7141895545 37
okini3939 2:a3e5edf84f74 38
okini3939 0:bdb53686c194 39 #define CONFIG_FILE "weather.cfg"
okini3939 0:bdb53686c194 40 #define IL_FILE "weather.asm"
okini3939 0:bdb53686c194 41
okini3939 2:a3e5edf84f74 42 #define CSV_MESG "%y-%m-%d %h:%i:%s,%.2P,%.2T,%.2H,%.2A,%.2V,%.2R,%.2L,%.2U,%.2M,%.2p"
okini3939 2:a3e5edf84f74 43 #define PACHUBE_MESG "%.2P,%.2T,%.2H,%.2A,%.2R"
okini3939 2:a3e5edf84f74 44
okini3939 0:bdb53686c194 45 #define TIMEZONE 9 // hour
okini3939 0:bdb53686c194 46
okini3939 2:a3e5edf84f74 47 #define CF_KEY_SIZE 32
okini3939 2:a3e5edf84f74 48 #define CF_VALUE_SIZE 128
okini3939 2:a3e5edf84f74 49 #define FORMAT_STR_SIZE 140
okini3939 2:a3e5edf84f74 50
okini3939 0:bdb53686c194 51 #define CF_TWITTER_NUM 5
okini3939 0:bdb53686c194 52 #define CF_MAIL_NUM 5
okini3939 0:bdb53686c194 53 #define INPUT_NUM 2
okini3939 0:bdb53686c194 54 #define OUTPUT_NUM 2
okini3939 0:bdb53686c194 55
okini3939 0:bdb53686c194 56 #define LED_FREQ 4 // x 0.1s
okini3939 0:bdb53686c194 57 #define NET_TIMEOUT 15000 // ms
okini3939 0:bdb53686c194 58
okini3939 0:bdb53686c194 59 #define LED_BUSY_ON led1 = 0
okini3939 0:bdb53686c194 60 #define LED_BUSY_OFF led1 = 1
okini3939 2:a3e5edf84f74 61 #ifdef USE_3LED
okini3939 2:a3e5edf84f74 62 #define LED_FILE_ACT_ON led_yellow = 1; led2 = 1
okini3939 2:a3e5edf84f74 63 #define LED_FILE_ACT_OFF led_yellow = 0; led2 = 0
okini3939 2:a3e5edf84f74 64 #else
okini3939 2:a3e5edf84f74 65 #define LED_FILE_ACT_ON led2 = 1
okini3939 2:a3e5edf84f74 66 #define LED_FILE_ACT_OFF led2 = 0
okini3939 2:a3e5edf84f74 67 #endif
okini3939 1:6c7141895545 68 #define LED_NET_ACT_ON led_yk = 0
okini3939 1:6c7141895545 69 #define LED_NET_ACT_OFF led_yk = 1
okini3939 1:6c7141895545 70 #define LED_NET_G_ON led_gayk = 1; led_gkya = 0
okini3939 1:6c7141895545 71 #define LED_NET_Y_ON led_gayk = 0; led_gkya = 1
okini3939 1:6c7141895545 72 #define LED_NET_GY_OFF led_gayk = 0; led_gkya = 0
okini3939 0:bdb53686c194 73
okini3939 2:a3e5edf84f74 74 #define sizeof_1(x) (sizeof(x) - 1)
okini3939 2:a3e5edf84f74 75 #define sizeof_len(x) (sizeof(x) - 1 - strlen(x))
okini3939 2:a3e5edf84f74 76
okini3939 0:bdb53686c194 77 enum eINPUTTYPE {
okini3939 0:bdb53686c194 78 INPUT_MOIST = 0,
okini3939 0:bdb53686c194 79 INPUT_FALL = 1,
okini3939 0:bdb53686c194 80 INPUT_RISE = 2,
okini3939 0:bdb53686c194 81 INPUT_CPM = 4,
okini3939 1:6c7141895545 82 INPUT_EXINOUT = 8,
okini3939 0:bdb53686c194 83 };
okini3939 0:bdb53686c194 84
okini3939 0:bdb53686c194 85 struct Sensor {
okini3939 0:bdb53686c194 86 float pres, temp, humi, light, anemo, vane, rain, uv, moist, temp2;
okini3939 0:bdb53686c194 87 time_t sec;
okini3939 0:bdb53686c194 88 int input[INPUT_NUM], output[OUTPUT_NUM];
okini3939 0:bdb53686c194 89 };
okini3939 0:bdb53686c194 90
okini3939 2:a3e5edf84f74 91 struct Config {
okini3939 2:a3e5edf84f74 92 IpAddr ipaddr, netmask, gateway, nameserver;
okini3939 2:a3e5edf84f74 93 char dir[8];
okini3939 2:a3e5edf84f74 94 int interval, baud, xbeebaud, filetype;
okini3939 2:a3e5edf84f74 95 char filename[32];
okini3939 2:a3e5edf84f74 96 char csv_mesg[CF_VALUE_SIZE], pachube_mesg[CF_VALUE_SIZE];
okini3939 2:a3e5edf84f74 97 char ntpserver[40];
okini3939 2:a3e5edf84f74 98 char pachube_apikey[80], pachube_feedid[8];
okini3939 2:a3e5edf84f74 99 char twitter_user[40], twitter_pwd[40], twitter_mesg[CF_TWITTER_NUM][CF_VALUE_SIZE];
okini3939 2:a3e5edf84f74 100 char stations_id[8], stations_pin[40];
okini3939 2:a3e5edf84f74 101 char snmp_commname[32];
okini3939 2:a3e5edf84f74 102 char lcd_mesg[CF_VALUE_SIZE];
okini3939 2:a3e5edf84f74 103 enum I2CLCDType lcdtype;
okini3939 2:a3e5edf84f74 104 enum I2CLCDConfig lcdconf;
okini3939 2:a3e5edf84f74 105 char leddisp_mesg[CF_VALUE_SIZE];
okini3939 2:a3e5edf84f74 106 enum eINPUTTYPE inputtype;
okini3939 2:a3e5edf84f74 107 #ifdef USE_EMAIL
okini3939 2:a3e5edf84f74 108 char smtphost[40], smtpuser[40], smtppwd[40];
okini3939 2:a3e5edf84f74 109 int smtpport;
okini3939 2:a3e5edf84f74 110 char mailfrom[40], mailmesg[CF_MAIL_NUM][40], mailto[CF_MAIL_NUM][40];
okini3939 2:a3e5edf84f74 111 #endif
okini3939 2:a3e5edf84f74 112 };
okini3939 2:a3e5edf84f74 113
okini3939 0:bdb53686c194 114 extern const char VERSION[];
okini3939 0:bdb53686c194 115 extern Serial pc;
okini3939 0:bdb53686c194 116 extern I2C i2c;
okini3939 0:bdb53686c194 117 extern EthernetNetIf *eth;
okini3939 2:a3e5edf84f74 118 extern PwmOut led1;
okini3939 2:a3e5edf84f74 119 extern DigitalOut led2, led3, led4;
okini3939 1:6c7141895545 120 extern DigitalOut led_gayk, led_gkya, led_yk;
okini3939 1:6c7141895545 121 #ifdef USE_3LED
okini3939 1:6c7141895545 122 extern DigitalOut led_red, led_yellow;
okini3939 1:6c7141895545 123 #endif
okini3939 2:a3e5edf84f74 124 extern struct Sensor sensor, offset, sensor_old;
okini3939 2:a3e5edf84f74 125 extern struct Config conf;
okini3939 0:bdb53686c194 126 extern volatile uint32_t locUpTime;
okini3939 0:bdb53686c194 127 extern char csv[];
okini3939 0:bdb53686c194 128
okini3939 0:bdb53686c194 129
okini3939 0:bdb53686c194 130 int init_conf ();
okini3939 7:f7c98d836f81 131 int init_log ();
okini3939 0:bdb53686c194 132 int write_log (const char *buf);
okini3939 7:f7c98d836f81 133 int fstime (char *d, time_t *tim);
okini3939 0:bdb53686c194 134 char* chop (char *s);
okini3939 0:bdb53686c194 135
okini3939 0:bdb53686c194 136 int init_net ();
okini3939 0:bdb53686c194 137 void pool_net ();
okini3939 0:bdb53686c194 138 int weatherstations ();
okini3939 2:a3e5edf84f74 139 int pachube ();
okini3939 0:bdb53686c194 140 int twitter (int num);
okini3939 0:bdb53686c194 141 int email (int num);
okini3939 0:bdb53686c194 142 int snmp_init (char *commname);
okini3939 2:a3e5edf84f74 143 int ntp (char *hostname);
okini3939 0:bdb53686c194 144
okini3939 0:bdb53686c194 145 int init_sensor ();
okini3939 0:bdb53686c194 146 int update_sensor ();
okini3939 0:bdb53686c194 147 char *format_str (const char *fmt, char *buf, int len);
okini3939 0:bdb53686c194 148
okini3939 0:bdb53686c194 149 int init_ilip (char *dir);
okini3939 0:bdb53686c194 150 void exec_ilip (int enable);
okini3939 0:bdb53686c194 151 void pool_ilip ();
okini3939 0:bdb53686c194 152
okini3939 0:bdb53686c194 153 int init_display ();
okini3939 0:bdb53686c194 154 void pool_display ();
okini3939 0:bdb53686c194 155 void update_display ();