summaryrefslogtreecommitdiff
path: root/sensor/thermostat.ino
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2018-04-02 16:53:40 +0100
committerdakkar <dakkar@thenautilus.net>2018-04-02 17:40:12 +0100
commit274a84ba9852cc453d31c54f761ba18541f951a7 (patch)
treed94875f751c94649547396d120dcd8a0b8a52092 /sensor/thermostat.ino
parentbump bt-server (diff)
downloadthermostat-274a84ba9852cc453d31c54f761ba18541f951a7.tar.gz
thermostat-274a84ba9852cc453d31c54f761ba18541f951a7.tar.bz2
thermostat-274a84ba9852cc453d31c54f761ba18541f951a7.zip
trying to do BLE
Diffstat (limited to 'sensor/thermostat.ino')
-rw-r--r--sensor/thermostat.ino138
1 files changed, 121 insertions, 17 deletions
diff --git a/sensor/thermostat.ino b/sensor/thermostat.ino
index 63f87f0..ba98158 100644
--- a/sensor/thermostat.ino
+++ b/sensor/thermostat.ino
@@ -1,36 +1,140 @@
+#include <string>
#include <Wire.h>
#include "SSD1306.h"
#include "DHTesp.h"
+#include "BLEDevice.h"
+
+static BLEUUID thermo_service_uuid("11111111-2222-3333-4444-000000000000");
+static BLEUUID thermo_temp_uuid("11111111-2222-3333-4444-000000000001");
+static BLEUUID thermo_time_uuid("11111111-2222-3333-4444-000000000002");
+
+#define DEFAULT_SLEEP_TIME 60
+/* Conversion factor for micro seconds to seconds */
+#define uS_TO_S_FACTOR 1000000
SSD1306 display(0x3c, 5, 4);
DHTesp dht;
-void setup() {
- dht.setup(13,DHTesp::AUTO_DETECT);
+void show(String x) {
+ display.clear();
+ display.drawString(0,0,x);
+ display.display();
+}
+
+class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
+ public:
+ BLEAddress* pServerAddress;
+
+ MyAdvertisedDeviceCallbacks() :
+ BLEAdvertisedDeviceCallbacks(),
+ pServerAddress(0)
+ {}
+
+ void onResult(BLEAdvertisedDevice advertisedDevice) {
+ // We have found a device, let us now see if it contains the service we are looking for.
+ String results = "Found: \n";
+ results += String(advertisedDevice.getAddress().toString().c_str());
+ show(results);
+
+ if (advertisedDevice.haveName() && advertisedDevice.getName() == "termostore") {
+ advertisedDevice.getScan()->stop();
+
+ pServerAddress = new BLEAddress(advertisedDevice.getAddress());
+
+ } // Found our server
+ } // onResult
+}; // MyAdvertisedDeviceCallbacks
+
+void read_sensor(float* humidity, float* temperature) {
+ dht.setup(13,DHTesp::DHT11);
+
+ while (1) {
+ delay(dht.getMinimumSamplingPeriod());
+ *humidity = dht.getHumidity();
+ *temperature = dht.getTemperature();
+
+ String data = "";
+ data += *humidity;
+ data += " ";
+ data += *temperature;
+ data += " ";
+ data += dht.getStatusString();
+ show(data);
+ if (dht.getStatus() != DHTesp::ERROR_TIMEOUT) return;
+ }
+}
+
+uint32_t send_data_and_get_time(BLEAddress* pAddress,String* data) {
+ BLEClient* pClient = BLEDevice::createClient();
+ show("Sc");
+ pClient->connect(*pAddress);
+ show("SC");
+ BLERemoteService* pThermoService = pClient->getService(thermo_service_uuid);
+ BLERemoteCharacteristic* pTemp = pThermoService->getCharacteristic(thermo_temp_uuid);
+ show("SCw");
+ pTemp->writeValue(data->c_str(),data->length());
+ show("SCWr");
+ BLERemoteCharacteristic* pTime = pThermoService->getCharacteristic(thermo_time_uuid);
+ std::string next_time = pTime->readValue();
+ show("SCWRd");
+ pClient->disconnect();
+ show("SCWRD");
+ return String(next_time.c_str()).toInt();
+}
+
+void setup() {
display.init();
display.connect();
- display.displayOn();
+ BLEDevice::init("");
}
void loop() {
- delay(dht.getMinimumSamplingPeriod());
- float humidity = dht.getHumidity();
- float temperature = dht.getTemperature();
+ display.displayOn();
+ display.clear();
- if (dht.getStatus() == DHTesp::ERROR_TIMEOUT) return;
+ BLEScan* pBLEScan = BLEDevice::getScan();
+ MyAdvertisedDeviceCallbacks* cb = new MyAdvertisedDeviceCallbacks();
+ pBLEScan->setAdvertisedDeviceCallbacks(cb);
+ pBLEScan->setActiveScan(true);
+ show("s");
+ BLEScanResults foundDevices = pBLEScan->start(30);
- display.clear();
+ if (cb->pServerAddress) {
+ show("S");
- String line;
- line = "T:"; line += temperature;
- display.drawString(0,0,line);
- line = "H:"; line += humidity;
- display.drawString(50,0,line);
- display.drawString(0,10,dht.getStatusString());
+ float humidity, temperature;
+ read_sensor(&humidity,&temperature);
+ String data = String(BLEDevice::getAddress().toString().c_str()) + " " + String(humidity) + " " + String(temperature) + "\n";
+ show(data);
+
+ int next_time = send_data_and_get_time(cb->pServerAddress,&data);
+ String nt = "Next time:";nt+=next_time;
+ display.drawString(0,20,nt);display.display();
+ delay(2000);
+ esp_sleep_enable_timer_wakeup(next_time * uS_TO_S_FACTOR);
+ }
+ else {
+ display.drawString(0,0,"s!");display.display();
+ String nt = "Next time:";nt+=DEFAULT_SLEEP_TIME;
+ display.drawString(0,20,nt);display.display();
+ delay(2000);
+ esp_sleep_enable_timer_wakeup(DEFAULT_SLEEP_TIME * uS_TO_S_FACTOR);
+ }
- display.drawProgressBar(5,25,120,10,int(temperature));
- display.drawProgressBar(5,40,120,10,int(humidity));
+ esp_deep_sleep_start();
- display.display();
+ /* display.clear(); */
+
+ /* String line; */
+ /* line = "T:"; line += temperature; */
+ /* display.drawString(0,0,line); */
+ /* line = "H:"; line += humidity; */
+ /* display.drawString(50,0,line); */
+ /* display.drawString(0,10,dht.getStatusString()); */
+
+ /* display.drawProgressBar(5,25,120,10,int(temperature)); */
+ /* display.drawProgressBar(5,40,120,10,int(humidity)); */
+
+ /* display.display(); */
}