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:
Wed Sep 07 16:03:54 2011 +0000
Revision:
3:058292da2cee
Parent:
2:a3e5edf84f74
Child:
4:46ad190e6328

        

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