LWM2M Weather Station
Dependencies: EthernetInterfaceUpdate mbed-rtos mbed nanoservice_client_1_12_X
main.cpp@0:2b74e0fc583d, 2014-11-25 (annotated)
- Committer:
- michaeljkoster
- Date:
- Tue Nov 25 01:43:27 2014 +0000
- Revision:
- 0:2b74e0fc583d
- Child:
- 2:d758d2248748
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
michaeljkoster | 0:2b74e0fc583d | 1 | #include "mbed.h" |
michaeljkoster | 0:2b74e0fc583d | 2 | #include "EthernetInterface.h" |
michaeljkoster | 0:2b74e0fc583d | 3 | #include "nsdl_support.h" |
michaeljkoster | 0:2b74e0fc583d | 4 | #include "dbg.h" |
michaeljkoster | 0:2b74e0fc583d | 5 | // Include various resources |
michaeljkoster | 0:2b74e0fc583d | 6 | #include "barometer.h" |
michaeljkoster | 0:2b74e0fc583d | 7 | #include "gas_sensor.h" |
michaeljkoster | 0:2b74e0fc583d | 8 | #include "humidity.h" |
michaeljkoster | 0:2b74e0fc583d | 9 | #include "illuminance.h" |
michaeljkoster | 0:2b74e0fc583d | 10 | #include "rain.h" |
michaeljkoster | 0:2b74e0fc583d | 11 | #include "temperature.h" |
michaeljkoster | 0:2b74e0fc583d | 12 | #include "wind.h" |
michaeljkoster | 0:2b74e0fc583d | 13 | #include "wind_gust.h" |
michaeljkoster | 0:2b74e0fc583d | 14 | #include "wind_direction.h" |
michaeljkoster | 0:2b74e0fc583d | 15 | |
michaeljkoster | 0:2b74e0fc583d | 16 | Serial pc(USBTX, USBRX); // tx, rx |
michaeljkoster | 0:2b74e0fc583d | 17 | |
michaeljkoster | 0:2b74e0fc583d | 18 | // **************************************************************************** |
michaeljkoster | 0:2b74e0fc583d | 19 | // Configuration section |
michaeljkoster | 0:2b74e0fc583d | 20 | |
michaeljkoster | 0:2b74e0fc583d | 21 | // Ethernet configuration |
michaeljkoster | 0:2b74e0fc583d | 22 | /* Define this to enable DHCP, otherwise manual address configuration is used */ |
michaeljkoster | 0:2b74e0fc583d | 23 | #define DHCP |
michaeljkoster | 0:2b74e0fc583d | 24 | |
michaeljkoster | 0:2b74e0fc583d | 25 | /* Manual IP configurations, if DHCP not defined */ |
michaeljkoster | 0:2b74e0fc583d | 26 | #define IP "10.45.0.206" |
michaeljkoster | 0:2b74e0fc583d | 27 | #define MASK "255.255.255.0" |
michaeljkoster | 0:2b74e0fc583d | 28 | #define GW "10.45.0.1" |
michaeljkoster | 0:2b74e0fc583d | 29 | |
michaeljkoster | 0:2b74e0fc583d | 30 | // NSP configuration |
michaeljkoster | 0:2b74e0fc583d | 31 | /* Change this IP address to that of your NanoService Platform installation */ |
michaeljkoster | 0:2b74e0fc583d | 32 | static const char* NSP_ADDRESS = "108.201.184.41"; /* smartobjectservice.com */ |
michaeljkoster | 0:2b74e0fc583d | 33 | //static const char* NSP_ADDRESS = "192.168.1.220"; /* local NSP*/ |
michaeljkoster | 0:2b74e0fc583d | 34 | //static const char* NSP_ADDRESS = "192.168.1.200"; /* local NSP*/ |
michaeljkoster | 0:2b74e0fc583d | 35 | static const int NSP_PORT = 5683; |
michaeljkoster | 0:2b74e0fc583d | 36 | char endpoint_name[32] = "mbed-"; |
michaeljkoster | 0:2b74e0fc583d | 37 | uint8_t ep_type[] = {"mbed_device"}; |
michaeljkoster | 0:2b74e0fc583d | 38 | uint8_t lifetime_ptr[] = {"60"}; |
michaeljkoster | 0:2b74e0fc583d | 39 | |
michaeljkoster | 0:2b74e0fc583d | 40 | // **************************************************************************** |
michaeljkoster | 0:2b74e0fc583d | 41 | // Ethernet initialization |
michaeljkoster | 0:2b74e0fc583d | 42 | |
michaeljkoster | 0:2b74e0fc583d | 43 | EthernetInterface eth; |
michaeljkoster | 0:2b74e0fc583d | 44 | |
michaeljkoster | 0:2b74e0fc583d | 45 | static void ethernet_init() |
michaeljkoster | 0:2b74e0fc583d | 46 | { |
michaeljkoster | 0:2b74e0fc583d | 47 | char mbed_uid[33]; // for creating unique name for the board |
michaeljkoster | 0:2b74e0fc583d | 48 | char macbytes[6]; |
michaeljkoster | 0:2b74e0fc583d | 49 | |
michaeljkoster | 0:2b74e0fc583d | 50 | /* Initialize network */ |
michaeljkoster | 0:2b74e0fc583d | 51 | #ifdef DHCP |
michaeljkoster | 0:2b74e0fc583d | 52 | NSDL_DEBUG("DHCP in use\r\n"); |
michaeljkoster | 0:2b74e0fc583d | 53 | eth.init(); |
michaeljkoster | 0:2b74e0fc583d | 54 | #else |
michaeljkoster | 0:2b74e0fc583d | 55 | eth.init(IP, MASK, GW); |
michaeljkoster | 0:2b74e0fc583d | 56 | #endif |
michaeljkoster | 0:2b74e0fc583d | 57 | NSDL_DEBUG("eth.init done\r\n"); |
michaeljkoster | 0:2b74e0fc583d | 58 | |
michaeljkoster | 0:2b74e0fc583d | 59 | if(eth.connect(30000) == 0) |
michaeljkoster | 0:2b74e0fc583d | 60 | pc.printf("Connect OK\n\r"); |
michaeljkoster | 0:2b74e0fc583d | 61 | |
michaeljkoster | 0:2b74e0fc583d | 62 | mbed_mac_address(macbytes); |
michaeljkoster | 0:2b74e0fc583d | 63 | sprintf(mbed_uid,"%02x%02x%02x%02x%02x%02x", macbytes[0], macbytes[1], macbytes[2], macbytes[3], macbytes[4], macbytes[5]); |
michaeljkoster | 0:2b74e0fc583d | 64 | strncat(endpoint_name, mbed_uid, 12); |
michaeljkoster | 0:2b74e0fc583d | 65 | |
michaeljkoster | 0:2b74e0fc583d | 66 | NSDL_DEBUG("IP Address:%s ", eth.getIPAddress()); |
michaeljkoster | 0:2b74e0fc583d | 67 | } |
michaeljkoster | 0:2b74e0fc583d | 68 | |
michaeljkoster | 0:2b74e0fc583d | 69 | // **************************************************************************** |
michaeljkoster | 0:2b74e0fc583d | 70 | // NSP initialization |
michaeljkoster | 0:2b74e0fc583d | 71 | |
michaeljkoster | 0:2b74e0fc583d | 72 | UDPSocket server; |
michaeljkoster | 0:2b74e0fc583d | 73 | Endpoint nsp; |
michaeljkoster | 0:2b74e0fc583d | 74 | |
michaeljkoster | 0:2b74e0fc583d | 75 | bool UDP_blocking = false; |
michaeljkoster | 0:2b74e0fc583d | 76 | unsigned int UDP_timeout = 1000; |
michaeljkoster | 0:2b74e0fc583d | 77 | |
michaeljkoster | 0:2b74e0fc583d | 78 | static void nsp_init() |
michaeljkoster | 0:2b74e0fc583d | 79 | { |
michaeljkoster | 0:2b74e0fc583d | 80 | server.init(); |
michaeljkoster | 0:2b74e0fc583d | 81 | |
michaeljkoster | 0:2b74e0fc583d | 82 | server.bind(NSP_PORT); |
michaeljkoster | 0:2b74e0fc583d | 83 | |
michaeljkoster | 0:2b74e0fc583d | 84 | server.set_blocking(UDP_blocking, UDP_timeout); |
michaeljkoster | 0:2b74e0fc583d | 85 | |
michaeljkoster | 0:2b74e0fc583d | 86 | nsp.set_address(NSP_ADDRESS, NSP_PORT); |
michaeljkoster | 0:2b74e0fc583d | 87 | |
michaeljkoster | 0:2b74e0fc583d | 88 | NSDL_DEBUG("name: %s", endpoint_name); |
michaeljkoster | 0:2b74e0fc583d | 89 | NSDL_DEBUG("NSP=%s - port %d\n", NSP_ADDRESS, NSP_PORT); |
michaeljkoster | 0:2b74e0fc583d | 90 | } |
michaeljkoster | 0:2b74e0fc583d | 91 | |
michaeljkoster | 0:2b74e0fc583d | 92 | // **************************************************************************** |
michaeljkoster | 0:2b74e0fc583d | 93 | // Resource creation |
michaeljkoster | 0:2b74e0fc583d | 94 | |
michaeljkoster | 0:2b74e0fc583d | 95 | static int create_resources() |
michaeljkoster | 0:2b74e0fc583d | 96 | { |
michaeljkoster | 0:2b74e0fc583d | 97 | sn_nsdl_resource_info_s *resource_ptr = NULL; |
michaeljkoster | 0:2b74e0fc583d | 98 | sn_nsdl_ep_parameters_s *endpoint_ptr = NULL; |
michaeljkoster | 0:2b74e0fc583d | 99 | |
michaeljkoster | 0:2b74e0fc583d | 100 | NSDL_DEBUG("Creating resources"); |
michaeljkoster | 0:2b74e0fc583d | 101 | |
michaeljkoster | 0:2b74e0fc583d | 102 | /* Create resources */ |
michaeljkoster | 0:2b74e0fc583d | 103 | resource_ptr = (sn_nsdl_resource_info_s*)nsdl_alloc(sizeof(sn_nsdl_resource_info_s)); |
michaeljkoster | 0:2b74e0fc583d | 104 | if(!resource_ptr) |
michaeljkoster | 0:2b74e0fc583d | 105 | return 0; |
michaeljkoster | 0:2b74e0fc583d | 106 | memset(resource_ptr, 0, sizeof(sn_nsdl_resource_info_s)); |
michaeljkoster | 0:2b74e0fc583d | 107 | |
michaeljkoster | 0:2b74e0fc583d | 108 | resource_ptr->resource_parameters_ptr = (sn_nsdl_resource_parameters_s*)nsdl_alloc(sizeof(sn_nsdl_resource_parameters_s)); |
michaeljkoster | 0:2b74e0fc583d | 109 | if(!resource_ptr->resource_parameters_ptr) |
michaeljkoster | 0:2b74e0fc583d | 110 | { |
michaeljkoster | 0:2b74e0fc583d | 111 | nsdl_free(resource_ptr); |
michaeljkoster | 0:2b74e0fc583d | 112 | return 0; |
michaeljkoster | 0:2b74e0fc583d | 113 | } |
michaeljkoster | 0:2b74e0fc583d | 114 | memset(resource_ptr->resource_parameters_ptr, 0, sizeof(sn_nsdl_resource_parameters_s)); |
michaeljkoster | 0:2b74e0fc583d | 115 | |
michaeljkoster | 0:2b74e0fc583d | 116 | // Static resources |
michaeljkoster | 0:2b74e0fc583d | 117 | nsdl_create_static_resource(resource_ptr, sizeof("3/0/0")-1, (uint8_t*) "3/0/0", sizeof("Manufacturer")-1, (uint8_t*) "Manufacturer", (uint8_t*) "mbedDEMO", sizeof("mbedDEMO")-1); |
michaeljkoster | 0:2b74e0fc583d | 118 | nsdl_create_static_resource(resource_ptr, sizeof("3/0/1")-1, (uint8_t*) "3/0/1", sizeof("Model_Number")-1, (uint8_t*) "Model_Number", (uint8_t*) "DEMO", sizeof("DEMO")-1); |
michaeljkoster | 0:2b74e0fc583d | 119 | |
michaeljkoster | 0:2b74e0fc583d | 120 | // Dynamic resources |
michaeljkoster | 0:2b74e0fc583d | 121 | //create_barometer_resource(resource_ptr); |
michaeljkoster | 0:2b74e0fc583d | 122 | create_gas_sensor_resource(resource_ptr); |
michaeljkoster | 0:2b74e0fc583d | 123 | //create_humidity_resource(resource_ptr); |
michaeljkoster | 0:2b74e0fc583d | 124 | //create_illuminance_resource(resource_ptr); |
michaeljkoster | 0:2b74e0fc583d | 125 | //create_rain_resource(resource_ptr); |
michaeljkoster | 0:2b74e0fc583d | 126 | //create_temperature_resource(resource_ptr); |
michaeljkoster | 0:2b74e0fc583d | 127 | //create_wind_resource(resource_ptr); |
michaeljkoster | 0:2b74e0fc583d | 128 | //create_wind_gust_resource(resource_ptr); |
michaeljkoster | 0:2b74e0fc583d | 129 | //create_wind_direction_resource(resource_ptr); |
michaeljkoster | 0:2b74e0fc583d | 130 | |
michaeljkoster | 0:2b74e0fc583d | 131 | /* Register with NSP */ |
michaeljkoster | 0:2b74e0fc583d | 132 | endpoint_ptr = nsdl_init_register_endpoint(endpoint_ptr, (uint8_t*)endpoint_name, ep_type, lifetime_ptr); |
michaeljkoster | 0:2b74e0fc583d | 133 | if(sn_nsdl_register_endpoint(endpoint_ptr) != 0) |
michaeljkoster | 0:2b74e0fc583d | 134 | pc.printf("NSP registering failed\r\n"); |
michaeljkoster | 0:2b74e0fc583d | 135 | else |
michaeljkoster | 0:2b74e0fc583d | 136 | pc.printf("NSP registering OK\r\n"); |
michaeljkoster | 0:2b74e0fc583d | 137 | nsdl_clean_register_endpoint(&endpoint_ptr); |
michaeljkoster | 0:2b74e0fc583d | 138 | nsdl_free(resource_ptr->resource_parameters_ptr); |
michaeljkoster | 0:2b74e0fc583d | 139 | nsdl_free(resource_ptr); |
michaeljkoster | 0:2b74e0fc583d | 140 | return 1; |
michaeljkoster | 0:2b74e0fc583d | 141 | } |
michaeljkoster | 0:2b74e0fc583d | 142 | |
michaeljkoster | 0:2b74e0fc583d | 143 | // **************************************************************************** |
michaeljkoster | 0:2b74e0fc583d | 144 | // Program entry point |
michaeljkoster | 0:2b74e0fc583d | 145 | |
michaeljkoster | 0:2b74e0fc583d | 146 | int main() |
michaeljkoster | 0:2b74e0fc583d | 147 | { |
michaeljkoster | 0:2b74e0fc583d | 148 | NSDL_DEBUG("mbed LWM2M Weather Station Example\n"); |
michaeljkoster | 0:2b74e0fc583d | 149 | |
michaeljkoster | 0:2b74e0fc583d | 150 | // Initialize Ethernet interface first |
michaeljkoster | 0:2b74e0fc583d | 151 | ethernet_init(); |
michaeljkoster | 0:2b74e0fc583d | 152 | |
michaeljkoster | 0:2b74e0fc583d | 153 | // Initialize NSP node |
michaeljkoster | 0:2b74e0fc583d | 154 | nsp_init(); |
michaeljkoster | 0:2b74e0fc583d | 155 | |
michaeljkoster | 0:2b74e0fc583d | 156 | // Initialize NSDL stack |
michaeljkoster | 0:2b74e0fc583d | 157 | nsdl_init(); |
michaeljkoster | 0:2b74e0fc583d | 158 | |
michaeljkoster | 0:2b74e0fc583d | 159 | // Create NSDL resources |
michaeljkoster | 0:2b74e0fc583d | 160 | create_resources(); |
michaeljkoster | 0:2b74e0fc583d | 161 | |
michaeljkoster | 0:2b74e0fc583d | 162 | // Run the NSDL event loop (never returns) |
michaeljkoster | 0:2b74e0fc583d | 163 | nsdl_event_loop(); |
michaeljkoster | 0:2b74e0fc583d | 164 | } |