Work with nodejs server: https://github.com/bjo3rn/idd-examples/tree/ben-node-demo/web/nodeServerHTTPSocket
Dependencies: HTTPClient WebSocketClient cc3000_hostdriver_mbedsocket mbed
Fork of CC3000_demo by
main.cpp@18:922b1ad5c826, 2014-11-05 (annotated)
- Committer:
- nebgnahz
- Date:
- Wed Nov 05 08:49:02 2014 +0000
- Revision:
- 18:922b1ad5c826
- Parent:
- 17:97c355870263
Simple WiFi demo.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nebgnahz | 13:26905142e97b | 1 | /** |
nebgnahz | 15:ac15ec676d87 | 2 | * \brief CS294-84 demo \author Ben Zhang, Antonio Iannopollo |
nebgnahz | 14:efd42910791b | 3 | * |
nebgnahz | 14:efd42910791b | 4 | * This sampel code illustrates how to connect the mbed KL25Z platform to internet |
nebgnahz | 14:efd42910791b | 5 | * thorugh the CC3000 wifi breakout board (http://www.adafruit.com/product/1469). |
nebgnahz | 14:efd42910791b | 6 | * Connections between the KL25Z and the CC3000 are made according to the |
nebgnahz | 14:efd42910791b | 7 | * guide at https://learn.adafruit.com/adafruit-cc3000-wifi -- KL25Z and arduino |
nebgnahz | 14:efd42910791b | 8 | * UNO are pin to pin compatible -- |
nebgnahz | 14:efd42910791b | 9 | * |
nebgnahz | 14:efd42910791b | 10 | * This application uses the following libraries: |
nebgnahz | 14:efd42910791b | 11 | * - cc3000_hostdriver_mbedsocket |
nebgnahz | 14:efd42910791b | 12 | * (http://developer.mbed.org/users/Kojto/code/cc3000_hostdriver_mbedsocket/) |
nebgnahz | 14:efd42910791b | 13 | * - HTTPClient (http://developer.mbed.org/users/donatien/code/HTTPClient/) |
nebgnahz | 14:efd42910791b | 14 | */ |
nebgnahz | 13:26905142e97b | 15 | |
nebgnahz | 18:922b1ad5c826 | 16 | #include <string> |
nebgnahz | 18:922b1ad5c826 | 17 | |
Kojto | 0:fe1445e57b7d | 18 | #include "cc3000.h" |
nebgnahz | 18:922b1ad5c826 | 19 | #include "mbed.h" |
Kojto | 0:fe1445e57b7d | 20 | #include "HTTPClient.h" |
Kojto | 0:fe1445e57b7d | 21 | |
nebgnahz | 18:922b1ad5c826 | 22 | const string POLLING_URL = "http://universe.eecs.berkeley.edu:8080/value"; |
nebgnahz | 18:922b1ad5c826 | 23 | const string UPDATE_URL = "http://universe.eecs.berkeley.edu:8080/update?value="; |
nebgnahz | 18:922b1ad5c826 | 24 | |
nebgnahz | 13:26905142e97b | 25 | // KL25Z wifi connection |
nebgnahz | 13:26905142e97b | 26 | // we need to define connection pins for: |
nebgnahz | 13:26905142e97b | 27 | // - IRQ => (pin D3) |
nebgnahz | 13:26905142e97b | 28 | // - Enable => (pin D5) |
nebgnahz | 13:26905142e97b | 29 | // - SPI CS => (pin D10) |
nebgnahz | 13:26905142e97b | 30 | // - SPI MOSI => (pin D11) |
nebgnahz | 13:26905142e97b | 31 | // - SPI MISO => (pin D12) |
nebgnahz | 13:26905142e97b | 32 | // - SPI CLK => (pin D13) |
nebgnahz | 13:26905142e97b | 33 | // plus wifi network SSID, password, security level and smart-configuration flag. |
nebgnahz | 14:efd42910791b | 34 | mbed_cc3000::cc3000 wifi(D3, D5, D10, SPI(D11, D12, D13), |
nebgnahz | 16:d40dee28b02e | 35 | "SSID", "PASSWORD", WPA2, false); |
antoni0 | 10:1804a9dbaee0 | 36 | |
nebgnahz | 13:26905142e97b | 37 | // create an http instance |
nebgnahz | 13:26905142e97b | 38 | HTTPClient http; |
Kojto | 0:fe1445e57b7d | 39 | |
nebgnahz | 13:26905142e97b | 40 | // str is used to hold the response data |
nebgnahz | 13:26905142e97b | 41 | char str[512]; |
nebgnahz | 14:efd42910791b | 42 | char url[80]; |
antoni0 | 7:47cd0d3d5e4d | 43 | |
nebgnahz | 13:26905142e97b | 44 | // setup the serial connection, and LEDs |
nebgnahz | 13:26905142e97b | 45 | Serial pc(USBTX, USBRX); |
nebgnahz | 13:26905142e97b | 46 | DigitalOut led_green(LED_GREEN); |
nebgnahz | 18:922b1ad5c826 | 47 | PwmOut led_red(LED_RED); |
nebgnahz | 18:922b1ad5c826 | 48 | |
nebgnahz | 18:922b1ad5c826 | 49 | Ticker reportSensorTicker; |
nebgnahz | 18:922b1ad5c826 | 50 | bool shouldReadSensor; |
nebgnahz | 18:922b1ad5c826 | 51 | int sensorData; |
nebgnahz | 18:922b1ad5c826 | 52 | |
nebgnahz | 18:922b1ad5c826 | 53 | void readSensor() { |
nebgnahz | 18:922b1ad5c826 | 54 | // avoid doing much work here (in the interrupt). |
nebgnahz | 18:922b1ad5c826 | 55 | // put the actual sensor reading in the main function |
nebgnahz | 18:922b1ad5c826 | 56 | shouldReadSensor = true; |
nebgnahz | 18:922b1ad5c826 | 57 | } |
antoni0 | 7:47cd0d3d5e4d | 58 | |
nebgnahz | 16:d40dee28b02e | 59 | int main() { |
nebgnahz | 18:922b1ad5c826 | 60 | pc.printf("CC3000 Nodejs Demo Starts\r\n"); |
nebgnahz | 18:922b1ad5c826 | 61 | // by default, we make the LED red |
nebgnahz | 18:922b1ad5c826 | 62 | led_red = 0; |
nebgnahz | 18:922b1ad5c826 | 63 | led_green = 1; |
nebgnahz | 13:26905142e97b | 64 | |
nebgnahz | 18:922b1ad5c826 | 65 | // reset the readsensor bool to false so we don't read the data. |
nebgnahz | 18:922b1ad5c826 | 66 | shouldReadSensor = false; |
nebgnahz | 18:922b1ad5c826 | 67 | sensorData = 0; |
nebgnahz | 18:922b1ad5c826 | 68 | // Every 5 second, we sample the sensor and report the data. |
nebgnahz | 18:922b1ad5c826 | 69 | reportSensorTicker.attach(&readSensor, 5.0); |
nebgnahz | 18:922b1ad5c826 | 70 | |
nebgnahz | 18:922b1ad5c826 | 71 | wifi.init(); |
nebgnahz | 18:922b1ad5c826 | 72 | |
nebgnahz | 18:922b1ad5c826 | 73 | while(1) { |
nebgnahz | 18:922b1ad5c826 | 74 | // continuosly check connection status |
nebgnahz | 18:922b1ad5c826 | 75 | if(wifi.is_connected() == false) { |
nebgnahz | 18:922b1ad5c826 | 76 | // try to connect |
nebgnahz | 18:922b1ad5c826 | 77 | if (wifi.connect() == -1) { |
nebgnahz | 18:922b1ad5c826 | 78 | pc.printf("Failed to connect." |
nebgnahz | 18:922b1ad5c826 | 79 | "Please verify connection details and try again.\r\n"); |
nebgnahz | 18:922b1ad5c826 | 80 | continue; |
nebgnahz | 18:922b1ad5c826 | 81 | } else { |
nebgnahz | 13:26905142e97b | 82 | |
nebgnahz | 18:922b1ad5c826 | 83 | pc.printf("IP address: %s \r\n", wifi.getIPAddress()); |
nebgnahz | 18:922b1ad5c826 | 84 | // once connected, turn green LED on and red LED off |
nebgnahz | 18:922b1ad5c826 | 85 | led_red = 1; |
nebgnahz | 18:922b1ad5c826 | 86 | led_green = 0; |
nebgnahz | 18:922b1ad5c826 | 87 | } |
nebgnahz | 18:922b1ad5c826 | 88 | } |
nebgnahz | 14:efd42910791b | 89 | |
nebgnahz | 18:922b1ad5c826 | 90 | // update the value when shouldReadSensor is true |
nebgnahz | 18:922b1ad5c826 | 91 | if (shouldReadSensor == true) { |
nebgnahz | 18:922b1ad5c826 | 92 | shouldReadSensor = false; |
nebgnahz | 18:922b1ad5c826 | 93 | sensorData += 10; |
nebgnahz | 18:922b1ad5c826 | 94 | char url[128]; |
nebgnahz | 18:922b1ad5c826 | 95 | snprintf(url, sizeof(url), "%s%d", UPDATE_URL.c_str(), sensorData); |
nebgnahz | 18:922b1ad5c826 | 96 | int ret = http.get(url, str, 128); |
nebgnahz | 18:922b1ad5c826 | 97 | if (!ret) { |
nebgnahz | 18:922b1ad5c826 | 98 | pc.printf("sending sensorData %d, response: %s\r\n", sensorData, str); |
nebgnahz | 18:922b1ad5c826 | 99 | } else { |
nebgnahz | 18:922b1ad5c826 | 100 | pc.printf("[PUSH] Error - ret = %d - HTTP %d\r\n", ret, http.getHTTPResponseCode()); |
nebgnahz | 18:922b1ad5c826 | 101 | } |
nebgnahz | 18:922b1ad5c826 | 102 | } |
nebgnahz | 18:922b1ad5c826 | 103 | |
nebgnahz | 18:922b1ad5c826 | 104 | // everytime we do HTTP polling |
nebgnahz | 18:922b1ad5c826 | 105 | int ret = http.get(POLLING_URL.c_str(), str, 128); |
nebgnahz | 18:922b1ad5c826 | 106 | if (!ret) { |
nebgnahz | 18:922b1ad5c826 | 107 | int value = atoi(str); |
nebgnahz | 18:922b1ad5c826 | 108 | led_red = 1.0 * value / 255; |
nebgnahz | 18:922b1ad5c826 | 109 | } else { |
nebgnahz | 18:922b1ad5c826 | 110 | pc.printf("[POLL] Error - ret = %d - HTTP %d\r\n", ret, http.getHTTPResponseCode()); |
nebgnahz | 18:922b1ad5c826 | 111 | } |
nebgnahz | 18:922b1ad5c826 | 112 | wait(0.1); |
Kojto | 0:fe1445e57b7d | 113 | } |
nebgnahz | 14:efd42910791b | 114 | } |