心拍センサーをサンプリングして、Ambientに送り、心拍波形を描くサンプルプログラムです。 https://ambidata.io
Dependencies: AmbientLib SimpleIoTBoardLib mbed
main.cpp@0:5e73ce0d93af, 2016-06-13 (annotated)
- Committer:
- AmbientData
- Date:
- Mon Jun 13 13:41:59 2016 +0000
- Revision:
- 0:5e73ce0d93af
Initial submission.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AmbientData | 0:5e73ce0d93af | 1 | /* |
AmbientData | 0:5e73ce0d93af | 2 | * while (true) { |
AmbientData | 0:5e73ce0d93af | 3 | * clear data. |
AmbientData | 0:5e73ce0d93af | 4 | * sample heart pulse every 25m seconds, 28 times. |
AmbientData | 0:5e73ce0d93af | 5 | * send data to Ambient. |
AmbientData | 0:5e73ce0d93af | 6 | * wait 2 seconds. |
AmbientData | 0:5e73ce0d93af | 7 | */ |
AmbientData | 0:5e73ce0d93af | 8 | #include "mbed.h" |
AmbientData | 0:5e73ce0d93af | 9 | #include "math.h" |
AmbientData | 0:5e73ce0d93af | 10 | #include "ESP8266Interface.h" |
AmbientData | 0:5e73ce0d93af | 11 | #include "TCPSocketConnection.h" |
AmbientData | 0:5e73ce0d93af | 12 | #include "SoftSerialSendOnry.h" |
AmbientData | 0:5e73ce0d93af | 13 | #include "Ambient.h" |
AmbientData | 0:5e73ce0d93af | 14 | |
AmbientData | 0:5e73ce0d93af | 15 | #define SAMPLING 25 // Sampling period in milliseconds |
AmbientData | 0:5e73ce0d93af | 16 | // When BPM is 100, IBI is 600msec and we have 30 samples. |
AmbientData | 0:5e73ce0d93af | 17 | #define NSAMPLES 35 // Number of Samples |
AmbientData | 0:5e73ce0d93af | 18 | #define BUFSIZE 1050 |
AmbientData | 0:5e73ce0d93af | 19 | |
AmbientData | 0:5e73ce0d93af | 20 | ESP8266Interface wifi(dp16,dp15,dp4,"ssid","password",115200); // TX,RX,Reset,SSID,Password,Baud |
AmbientData | 0:5e73ce0d93af | 21 | |
AmbientData | 0:5e73ce0d93af | 22 | SoftSerialSendOnry pc(dp10); |
AmbientData | 0:5e73ce0d93af | 23 | DigitalOut led(dp6); |
AmbientData | 0:5e73ce0d93af | 24 | |
AmbientData | 0:5e73ce0d93af | 25 | unsigned int channelId = 100; |
AmbientData | 0:5e73ce0d93af | 26 | const char* userKey = "ユーザーキー"; |
AmbientData | 0:5e73ce0d93af | 27 | const char* writeKey = "ライトキー"; |
AmbientData | 0:5e73ce0d93af | 28 | Ambient ambient; |
AmbientData | 0:5e73ce0d93af | 29 | |
AmbientData | 0:5e73ce0d93af | 30 | AnalogIn pulsePin(dp13); |
AmbientData | 0:5e73ce0d93af | 31 | Ticker t2; |
AmbientData | 0:5e73ce0d93af | 32 | volatile int done = false; |
AmbientData | 0:5e73ce0d93af | 33 | unsigned short signal[NSAMPLES]; |
AmbientData | 0:5e73ce0d93af | 34 | char buffer[BUFSIZE]; |
AmbientData | 0:5e73ce0d93af | 35 | volatile int sampleIndex = 0; |
AmbientData | 0:5e73ce0d93af | 36 | |
AmbientData | 0:5e73ce0d93af | 37 | void sampling() { |
AmbientData | 0:5e73ce0d93af | 38 | led = 1; |
AmbientData | 0:5e73ce0d93af | 39 | signal[sampleIndex++] = pulsePin.read_u16(); |
AmbientData | 0:5e73ce0d93af | 40 | if (sampleIndex >= NSAMPLES) { |
AmbientData | 0:5e73ce0d93af | 41 | done = true; |
AmbientData | 0:5e73ce0d93af | 42 | } |
AmbientData | 0:5e73ce0d93af | 43 | } |
AmbientData | 0:5e73ce0d93af | 44 | |
AmbientData | 0:5e73ce0d93af | 45 | int main() { |
AmbientData | 0:5e73ce0d93af | 46 | TCPSocketConnection socket; |
AmbientData | 0:5e73ce0d93af | 47 | |
AmbientData | 0:5e73ce0d93af | 48 | pc.baud(9600); |
AmbientData | 0:5e73ce0d93af | 49 | pc.printf("start\r\n"); |
AmbientData | 0:5e73ce0d93af | 50 | wifi.init(); //Reset |
AmbientData | 0:5e73ce0d93af | 51 | wifi.connect(); //Use DHCP |
AmbientData | 0:5e73ce0d93af | 52 | pc.printf("IP Address is %s\r\n", wifi.getIPAddress()); |
AmbientData | 0:5e73ce0d93af | 53 | ambient.init(channelId, writeKey, &socket); |
AmbientData | 0:5e73ce0d93af | 54 | led = 0; |
AmbientData | 0:5e73ce0d93af | 55 | |
AmbientData | 0:5e73ce0d93af | 56 | while (true) { |
AmbientData | 0:5e73ce0d93af | 57 | pc.printf("sampling start..."); |
AmbientData | 0:5e73ce0d93af | 58 | done = false; |
AmbientData | 0:5e73ce0d93af | 59 | sampleIndex = 0; |
AmbientData | 0:5e73ce0d93af | 60 | t2.attach_us(&sampling, SAMPLING * 1000.0f); |
AmbientData | 0:5e73ce0d93af | 61 | while (!done) { |
AmbientData | 0:5e73ce0d93af | 62 | ; |
AmbientData | 0:5e73ce0d93af | 63 | } |
AmbientData | 0:5e73ce0d93af | 64 | t2.detach(); |
AmbientData | 0:5e73ce0d93af | 65 | pc.printf("done\r\n"); |
AmbientData | 0:5e73ce0d93af | 66 | led = 0; |
AmbientData | 0:5e73ce0d93af | 67 | |
AmbientData | 0:5e73ce0d93af | 68 | sprintf(buffer, "{\"writeKey\":\"%s\",\"data\":[", writeKey); |
AmbientData | 0:5e73ce0d93af | 69 | for (int i = 0; i < NSAMPLES; i++) { |
AmbientData | 0:5e73ce0d93af | 70 | sprintf(&buffer[strlen(buffer)], "{\"created\":%d,\"d%d\":%d},", SAMPLING * i, 2, signal[i]); |
AmbientData | 0:5e73ce0d93af | 71 | } |
AmbientData | 0:5e73ce0d93af | 72 | buffer[strlen(buffer)-1] = '\0'; |
AmbientData | 0:5e73ce0d93af | 73 | sprintf(&buffer[strlen(buffer)], "]}\r\n"); |
AmbientData | 0:5e73ce0d93af | 74 | |
AmbientData | 0:5e73ce0d93af | 75 | ambient.delete_data(userKey); |
AmbientData | 0:5e73ce0d93af | 76 | |
AmbientData | 0:5e73ce0d93af | 77 | int sent = ambient.bulk_send(buffer); |
AmbientData | 0:5e73ce0d93af | 78 | pc.printf("%d bytes sent\r\n", sent); |
AmbientData | 0:5e73ce0d93af | 79 | |
AmbientData | 0:5e73ce0d93af | 80 | wait(5); |
AmbientData | 0:5e73ce0d93af | 81 | } |
AmbientData | 0:5e73ce0d93af | 82 | } |