I use a program that saves pulse wave and body temperature data in a file and can check it with a browser.
But there is a problem with this program.
It takes time to process the open command to acquire the data every second.
How can I send data every second?
Write the code used below and the result of the Arduino serial monitor.
Because I am using Google translation, it may be funny English, but thank you.
ArduinoIDE
Code:
#include <PinChangeInt.h>
#include <eHealth.h>
//Enter here your data
const char wifi_ssid[] = "ssid";
const char wifi_password[] = "passward";
const char host[] = "my PC IP";
const char gateway[] = "192.168.0.1";
const char server[] = "192.168.0.70";
const char host_port[] = "8080";
const char GET[] = "test.php?Temperature=20&PRbpm=45";
int8_t answer;
char response[300];
char response2[100];
int cont;
int kaunt=0;
char aux_str[100];
int s=1;
int l=0;
char value[50];
void setup()
{
//Write here you correct baud rate
Serial.begin(9600);
//Serial.begin(115200);
wificonfig();
eHealth.initPulsioximeter();
//Attach the inttruptions for using the pulsioximeter.
PCintPort::attachInterrupt(6, readPulsioximeter, RISING);
}
void loop()
{
Serial.println(F("Sending HTTP GET"));
//delay(100);
while(s>0){
Serial.println("=============================");
Serial.print("PRbpm : ");
Serial.print(eHealth.getBPM());
Serial.print(" %SPo2 : ");
Serial.print(eHealth.getOxygenSaturation());
Serial.print("\n");
//delay(500);
float temperature = eHealth.getTemperature();
Serial.print("Temperature (ºC): ");
Serial.print(temperature, 2);
Serial.println("");
Serial.println("=============================");
sendGET(temperature,eHealth.getBPM());
//delay(1000); // wait for a second
}
}
void wificonfig() {
Serial.println(F("Setting Wifi parameters"));
sendCommand("exit\r","EXIT",2000);
//delay(2000);
enterConfig(2000);
sendCommand("leave\r","DeAuth",2000);
//delay(1000);
// Sets DHCP and TCP protocol
/*sendCommand("set ip dhcp 1\r","AOK",2000);
delay(1000);
sendCommand("set ip protocol 18\r","AOK",2000);
delay(1000);
// Configures the way to join the network AP, sets the encryption of the
// network and joins it
sendCommand("set wlan join 0\r","AOK",2000); //The auto-join feature is disabled
delay(1000);
snprintf(aux_str, sizeof(aux_str), "set wlan phrase %s\r", wifi_password);
sendCommand(aux_str,"AOK",2000);*/
//delay(1000);
snprintf(aux_str, sizeof(aux_str), "join %s\r", wifi_ssid);
answer = sendCommand(aux_str,"Associated",10000);
if (answer == 1){
snprintf(aux_str, sizeof(aux_str), "Connected to \"%s\"", wifi_ssid);
Serial.println(aux_str);
//delay(5000);
}
else {
snprintf(aux_str, sizeof(aux_str), "Error connecting to: \"%s\"", wifi_ssid);
Serial.println(aux_str);
delay(1000);
}
Serial.println(F("Wifi succesfully configured"));
//delay(1000);
}
void sendGET(float Temperature,int PRbpm) {
enterConfig(2000);
//sendCommand("set i h 0\r","AOK",2000);
//delay(1000);
//snprintf(aux_str, sizeof(aux_str), "set d n %s\r", server);
//sendCommand(aux_str,"AOK",2000);
/*delay(1000);
snprintf(aux_str, sizeof(aux_str), "set dns address %s\r", gateway);
sendCommand(aux_str,"AOK",2000);
delay(1000);
snprintf(aux_str, sizeof(aux_str), "set ip host %s\r", host);
sendCommand(aux_str,"AOK",2000);
delay(1000);
snprintf(aux_str, sizeof(aux_str), "set ip gateway %s\r", gateway);
sendCommand(aux_str,"AOK",2000);
delay(1000);
snprintf(aux_str, sizeof(aux_str), "set ip address %s\r", server);
sendCommand(aux_str,"AOK",2000);
delay(1000);*/
//Configures HTTP connection
snprintf(aux_str, sizeof(aux_str), "set ip remote %s\r", host_port);
sendCommand(aux_str,"AOK",2000);
//delay(1000);
sendCommand("set opt format 1\r","AOK",2000);
//delay(1000);
dtostrf(Temperature,5,2,value);
snprintf(aux_str, sizeof(aux_str), "set comm remote GET$/test.php?Temperature=%s&PRbpm=%d\r", value,PRbpm);
sendCommand(aux_str,"AOK",10000);
//delay(1000);
// Calls open to launch the configured connection.
sendCommand("open\r","*CLOS*",10000);
//delay(1000);
findResponse();
}
void findResponse(){
Serial.println(response);
boolean go_On = true;
uint16_t counter = 0;
while (go_On){
if (response[counter] == '\r'){
if (response[counter+1] == '\n'){
if (response[counter+2] == '\r'){
if (response[counter+3] == '\n'){
go_On = false;
}
}
}
}
counter++;
}
counter = counter + 3;
for (int i=0;response[i+counter]!='*'; i++){
response2[i] = response[i+counter];
delay(100);
}
snprintf(aux_str, sizeof(aux_str), "GET response:\"%s\"", response2);
Serial.println(aux_str);
}
int8_t sendCommand(const char* Command, const char* expected_answer, unsigned int timeout){
uint8_t x=0, answer=0;
unsigned long previous;
memset(response, 0,300); // Initialize the string
delay(100);
while( Serial.available() > 0) Serial.read(); // Clean the input buffer
Serial.println(Command); // Send Command
x = 0;
previous = millis();
// this loop waits for the answer
do{
if(Serial.available() != 0){
// if there are data in the UART input buffer, reads it and checks for the asnwer
response[x] = Serial.read();
x++;
// check if the desired answer is in the response of the module
if (strstr(response, expected_answer) != NULL)
{
answer = 1;
}
}
}
// Waits for the asnwer with time out
while((answer == 0) && ((millis() - previous) < timeout));
return answer;
}
int8_t enterConfig(unsigned int timeout){
uint8_t x=0, answer=0;
unsigned long previous;
memset(response, 0,300); // Initialize the string
delay(100);
while( Serial.available() > 0) Serial.read(); // Clean the input buffer
Serial.print("$$$"); // Send Command
x = 0;
previous = millis();
// this loop waits for the answer
do{
if(Serial.available() != 0){
// if there are data in the UART input buffer, reads it and checks for the asnwer
response[x] = Serial.read();
x++;
// check if the desired answer is in the response of the module
if (strstr(response, "CMD") != NULL)
{
answer = 1;
}
}
}
// Waits for the asnwer with time out
while((answer == 0) && ((millis() - previous) < timeout));
return answer;
}
void readPulsioximeter(){
cont ++;
if (cont == 50) { //Get only of one 50 measures to reduce the latency
eHealth.readPulsioximeter();
cont = 0;
}
}
test.php
Code:
<?php
$filename = "data.txt";
$data1 = $_GET['Temperature'];
$data2 = $_GET['PRbpm'];
if($data1=='a'){
$fp = fopen($filename, "r");
$contents = fread($fp, filesize($filename));
print($contents);
fclose($fp);
}
else{
$fp = fopen($filename, 'a');
date_default_timezone_set('Asia/Tokyo');
fwrite($fp, date("Y-m-d H:i:s")."\t".$data1."\t".$data2."\r\n");
fclose($fp);
}
?>
ーSerial monitorー
Setting Wifi parameters
exit
$$$leave
join AirMacTimeCapsuleKO
Connected to "AirMacTimeCapsuleKO"
Wifi succesfully configured
Sending HTTP GET
=============================
PRbpm : 0 %SPo2 : 0
Temperature (ºC): 44.71
=============================
$$$set ip remote 8080
set opt format 1
set comm remote GET$/test.php?Temperature=44.71&PRbpm=0
open
open
<4.41>
<4.41>
*OPEN*HTTP/1.1 200 OK
Date: Mon, 11 Jun 2018 09:28:36 GMT
Server: Apache/2.4.33 (Win32) OpenSSL/1.1.0h PHP/7.2.5
X-Powered-By: PHP/7.2.5
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8
*CLOS*
GET response:""
=============================
PRbpm : 0 %SPo2 : 0
Temperature (ºC): 44.78
=============================
$$$set ip remote 8080
set opt format 1
set comm remote GET$/test.php?Temperature=44.78&PRbpm=0
open
open
<4.41>
<4.41>
*OPEN*HTTP/1.1 200 OK
Date: Mon, 11 Jun 2018 09:28:44 GMT
Server: Apache/2.4.33 (Win32) OpenSSL/1.1.0h PHP/7.2.5
X-Powered-By: PHP/7.2.5
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8
*CLOS*
GET response:""
=============================
PRbpm : 0 %SPo2 : 0
Temperature (ºC): 44.93
=============================
$$$set ip remote 8080
set opt format 1
set comm remote GET$/test.php?Temperature=44.93&PRbpm=0
open
open
<4.41>
<4.41>
*OPEN*HTTP/1.1 200 OK
Date: Mon, 11 Jun 2018 09:28:52 GMT
Server: Apache/2.4.33 (Win32) OpenSSL/1.1.0h PHP/7.2.5
X-Powered-By: PHP/7.2.5
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8
*CLOS*
GET response:""
=============================
PRbpm : 0 %SPo2 : 0
Temperature (ºC): 44.67
=============================
$$$set ip remote 8080
set opt format 1
set comm remote GET$/test.php?Temperature=44.67&PRbpm=0
open
open
<4.41>
<4.41>
*OPEN*HTTP/1.1 200 OK
Date: Mon, 11 Jun 2018 09:29:00 GMT
Server: Apache/2.4.33 (Win32) OpenSSL/1.1.0h PHP/7.2.5
X-Powered-By: PHP/7.2.5
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8
*CLOS*