lightweight Web server dust sensor
Dependencies: EthernetInterface HTTPD mbed-rpc mbed-rtos mbed
main.cpp@1:943c19be081b, 2015-02-02 (annotated)
- Committer:
- mbedschool
- Date:
- Mon Feb 02 07:41:01 2015 +0000
- Revision:
- 1:943c19be081b
- Parent:
- 0:b6cf0e62b3a2
lightweight Web server dust sensor
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbedschool | 0:b6cf0e62b3a2 | 1 | #include "mbed.h" |
mbedschool | 0:b6cf0e62b3a2 | 2 | #include "EthernetInterface.h" |
mbedschool | 0:b6cf0e62b3a2 | 3 | #include "HTTPD.h" |
mbedschool | 0:b6cf0e62b3a2 | 4 | |
mbedschool | 0:b6cf0e62b3a2 | 5 | EthernetInterface *eth; |
mbedschool | 0:b6cf0e62b3a2 | 6 | HTTPD *httpd; |
mbedschool | 0:b6cf0e62b3a2 | 7 | |
mbedschool | 0:b6cf0e62b3a2 | 8 | Serial pc(USBTX, USBRX); |
mbedschool | 0:b6cf0e62b3a2 | 9 | InterruptIn probe(p8); |
mbedschool | 0:b6cf0e62b3a2 | 10 | LocalFileSystem local("local"); |
mbedschool | 0:b6cf0e62b3a2 | 11 | DigitalOut led1(LED1), led2(LED2); |
mbedschool | 0:b6cf0e62b3a2 | 12 | Timer timer; |
mbedschool | 0:b6cf0e62b3a2 | 13 | Ticker ticker; |
mbedschool | 0:b6cf0e62b3a2 | 14 | |
mbedschool | 0:b6cf0e62b3a2 | 15 | uint32_t low_time = 0; |
mbedschool | 0:b6cf0e62b3a2 | 16 | |
mbedschool | 0:b6cf0e62b3a2 | 17 | void down(); |
mbedschool | 0:b6cf0e62b3a2 | 18 | void up(); |
mbedschool | 0:b6cf0e62b3a2 | 19 | |
mbedschool | 0:b6cf0e62b3a2 | 20 | void tick() |
mbedschool | 0:b6cf0e62b3a2 | 21 | { |
mbedschool | 0:b6cf0e62b3a2 | 22 | pc.printf("%d us, %f %%\r\n", low_time, low_time / (30.0 * 1000000)); |
mbedschool | 0:b6cf0e62b3a2 | 23 | low_time = 0; |
mbedschool | 0:b6cf0e62b3a2 | 24 | } |
mbedschool | 0:b6cf0e62b3a2 | 25 | |
mbedschool | 0:b6cf0e62b3a2 | 26 | void down() |
mbedschool | 0:b6cf0e62b3a2 | 27 | { |
mbedschool | 0:b6cf0e62b3a2 | 28 | probe.rise(&up); |
mbedschool | 0:b6cf0e62b3a2 | 29 | led1 = 0; |
mbedschool | 0:b6cf0e62b3a2 | 30 | timer.start(); |
mbedschool | 0:b6cf0e62b3a2 | 31 | } |
mbedschool | 0:b6cf0e62b3a2 | 32 | |
mbedschool | 0:b6cf0e62b3a2 | 33 | void up() |
mbedschool | 0:b6cf0e62b3a2 | 34 | { |
mbedschool | 0:b6cf0e62b3a2 | 35 | led1 = 1; |
mbedschool | 0:b6cf0e62b3a2 | 36 | timer.stop(); |
mbedschool | 0:b6cf0e62b3a2 | 37 | probe.fall(&down); |
mbedschool | 0:b6cf0e62b3a2 | 38 | |
mbedschool | 0:b6cf0e62b3a2 | 39 | low_time += timer.read_us(); |
mbedschool | 0:b6cf0e62b3a2 | 40 | timer.reset(); |
mbedschool | 0:b6cf0e62b3a2 | 41 | } |
mbedschool | 0:b6cf0e62b3a2 | 42 | |
mbedschool | 0:b6cf0e62b3a2 | 43 | void callback_api(int id) { |
mbedschool | 0:b6cf0e62b3a2 | 44 | int i, n; |
mbedschool | 0:b6cf0e62b3a2 | 45 | char low_time_buf[256]; |
mbedschool | 0:b6cf0e62b3a2 | 46 | char buf[256]; |
mbedschool | 0:b6cf0e62b3a2 | 47 | |
mbedschool | 0:b6cf0e62b3a2 | 48 | sprintf( low_time_buf, "%f", low_time / (30.0 * 1000000)); |
mbedschool | 0:b6cf0e62b3a2 | 49 | strcpy(buf, "{"); |
mbedschool | 0:b6cf0e62b3a2 | 50 | strcat(buf, "success: true ,"); |
mbedschool | 0:b6cf0e62b3a2 | 51 | strcat(buf, "data: {"); |
mbedschool | 0:b6cf0e62b3a2 | 52 | strcat(buf, "lowpulseoccupancytime: "); |
mbedschool | 0:b6cf0e62b3a2 | 53 | strcat(buf, low_time_buf); |
mbedschool | 0:b6cf0e62b3a2 | 54 | strcat(buf, "}"); |
mbedschool | 0:b6cf0e62b3a2 | 55 | strcat(buf, "}"); |
mbedschool | 0:b6cf0e62b3a2 | 56 | |
mbedschool | 0:b6cf0e62b3a2 | 57 | n = strlen(buf); |
mbedschool | 0:b6cf0e62b3a2 | 58 | i = httpd->receive(id, &buf[n], sizeof(buf) - n); |
mbedschool | 0:b6cf0e62b3a2 | 59 | if (i < 0) return; |
mbedschool | 0:b6cf0e62b3a2 | 60 | i += n; |
mbedschool | 0:b6cf0e62b3a2 | 61 | buf[i] = 0; |
mbedschool | 0:b6cf0e62b3a2 | 62 | printf("API %d %s\r\n", id, buf); |
mbedschool | 0:b6cf0e62b3a2 | 63 | httpd->send(id, buf, i, "Content-Type: text/plain\r\n"); |
mbedschool | 0:b6cf0e62b3a2 | 64 | } |
mbedschool | 0:b6cf0e62b3a2 | 65 | |
mbedschool | 0:b6cf0e62b3a2 | 66 | int main() { |
mbedschool | 0:b6cf0e62b3a2 | 67 | pc.baud(115200); |
mbedschool | 0:b6cf0e62b3a2 | 68 | pc.printf("Dust Sensor test\r\n"); |
mbedschool | 0:b6cf0e62b3a2 | 69 | probe.fall(&down); |
mbedschool | 0:b6cf0e62b3a2 | 70 | ticker.attach(tick, 30); |
mbedschool | 0:b6cf0e62b3a2 | 71 | |
mbedschool | 0:b6cf0e62b3a2 | 72 | printf("HTTP Server...\r\n"); |
mbedschool | 0:b6cf0e62b3a2 | 73 | |
mbedschool | 0:b6cf0e62b3a2 | 74 | eth = new EthernetInterface; |
mbedschool | 0:b6cf0e62b3a2 | 75 | eth->init("192.168.21.81", "255.255.255.0", "192.168.21.2" ); |
mbedschool | 0:b6cf0e62b3a2 | 76 | |
mbedschool | 0:b6cf0e62b3a2 | 77 | if (eth->connect()) return -1; |
mbedschool | 0:b6cf0e62b3a2 | 78 | |
mbedschool | 0:b6cf0e62b3a2 | 79 | printf("IP Address is %s\r\n", eth->getIPAddress()); |
mbedschool | 0:b6cf0e62b3a2 | 80 | httpd = new HTTPD; |
mbedschool | 0:b6cf0e62b3a2 | 81 | httpd->attach("/1/mbed/lpc1768/sensor/dust/sen12291p", &callback_api); |
mbedschool | 0:b6cf0e62b3a2 | 82 | httpd->attach("/", "/local/"); |
mbedschool | 0:b6cf0e62b3a2 | 83 | httpd->start(80); |
mbedschool | 0:b6cf0e62b3a2 | 84 | printf("httpd ready\r\n"); |
mbedschool | 0:b6cf0e62b3a2 | 85 | led2 = 1; |
mbedschool | 0:b6cf0e62b3a2 | 86 | } |
mbedschool | 0:b6cf0e62b3a2 | 87 |