Initial commit
This commit is contained in:
commit
1e257669de
4 changed files with 209 additions and 0 deletions
6
.vscode/arduino.json
vendored
Normal file
6
.vscode/arduino.json
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"port": "COM4",
|
||||
"board": "esp8266:esp8266:d1_mini",
|
||||
"configuration": "CpuFrequency=80,FlashSize=4M1M,LwIPVariant=v2mss536,Debug=Disabled,DebugLevel=None____,UploadSpeed=921600",
|
||||
"sketch": "monitor.ino"
|
||||
}
|
26
.vscode/c_cpp_properties.json
vendored
Normal file
26
.vscode/c_cpp_properties.json
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"includePath": [
|
||||
"/home/rob/Arduino/libraries/Adafruit_ADS1X15",
|
||||
"/home/rob/.arduino15/packages/esp8266/tools/**",
|
||||
"/home/rob/.arduino15/packages/esp8266/hardware/esp8266/2.4.0/**",
|
||||
"/home/rob/Apps/arduino-1.8.5/tools/**",
|
||||
"/home/rob/Apps/arduino-1.8.5/hardware/arduino/avr/**"
|
||||
],
|
||||
"intelliSenseMode": "clang-x64",
|
||||
"compilerPath": "/usr/bin/gcc",
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++17"
|
||||
},
|
||||
{
|
||||
"name": "Win32",
|
||||
"includePath": [
|
||||
"C:\\Users\\Rob\\AppData\\Local\\Arduino15\\packages\\esp8266\\tools\\**",
|
||||
"C:\\Users\\Rob\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.4.0\\**"
|
||||
]
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
45
.vscode/settings.json
vendored
Normal file
45
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"files.associations": {
|
||||
"array": "cpp",
|
||||
"hash_map": "cpp",
|
||||
"initializer_list": "cpp",
|
||||
"utility": "cpp",
|
||||
"*.tcc": "cpp",
|
||||
"cctype": "cpp",
|
||||
"clocale": "cpp",
|
||||
"cmath": "cpp",
|
||||
"cstdarg": "cpp",
|
||||
"cstddef": "cpp",
|
||||
"cstdint": "cpp",
|
||||
"cstdio": "cpp",
|
||||
"cstdlib": "cpp",
|
||||
"cstring": "cpp",
|
||||
"ctime": "cpp",
|
||||
"cwchar": "cpp",
|
||||
"cwctype": "cpp",
|
||||
"deque": "cpp",
|
||||
"list": "cpp",
|
||||
"unordered_map": "cpp",
|
||||
"vector": "cpp",
|
||||
"exception": "cpp",
|
||||
"fstream": "cpp",
|
||||
"functional": "cpp",
|
||||
"iomanip": "cpp",
|
||||
"iosfwd": "cpp",
|
||||
"iostream": "cpp",
|
||||
"istream": "cpp",
|
||||
"limits": "cpp",
|
||||
"memory": "cpp",
|
||||
"new": "cpp",
|
||||
"ostream": "cpp",
|
||||
"numeric": "cpp",
|
||||
"sstream": "cpp",
|
||||
"stdexcept": "cpp",
|
||||
"streambuf": "cpp",
|
||||
"system_error": "cpp",
|
||||
"cinttypes": "cpp",
|
||||
"type_traits": "cpp",
|
||||
"tuple": "cpp",
|
||||
"typeinfo": "cpp"
|
||||
}
|
||||
}
|
132
monitor.ino
Normal file
132
monitor.ino
Normal file
|
@ -0,0 +1,132 @@
|
|||
// see here: https://forum.arduino.cc/index.php?topic=336012.msg2643184#msg2643184 and https://scidle.com/how-to-use-a-ph-sensor-with-arduino/
|
||||
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_ADS1015.h>
|
||||
#include <PubSubClient.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <OneWire.h>
|
||||
#include <DallasTemperature.h>
|
||||
|
||||
#define MQTT_SERVER "192.168.1.3"
|
||||
#define SSID "GCHQ Surveillance Van"
|
||||
#define PASSWORD "cocklol."
|
||||
#define PH_TOPIC "/home/sensors/fishtank/ph"
|
||||
#define TEMPERATURE_TOPIC "/home/sensors/fishtank/temperature"
|
||||
#define TEMPERATURE_PIN D5
|
||||
|
||||
#define PH_7_VOLTAGE 2.5
|
||||
#define PH_4_VOLTAGE 3.04
|
||||
|
||||
#define VOLTAGE_OFFSET 0.03
|
||||
|
||||
void mqttCallback(char *topic, byte *payload, unsigned int length);
|
||||
|
||||
Adafruit_ADS1115 ads;
|
||||
OneWire oneWire(TEMPERATURE_PIN);
|
||||
DallasTemperature DS18B20(&oneWire);
|
||||
WiFiClient wifiClient;
|
||||
PubSubClient client = PubSubClient(MQTT_SERVER, 1883, mqttCallback, wifiClient);
|
||||
|
||||
float pHStep = (PH_7_VOLTAGE - PH_4_VOLTAGE) / 3;
|
||||
|
||||
void waitForWiFi() {
|
||||
if (WiFi.status() == WL_CONNECTED)
|
||||
return;
|
||||
Serial.println("Reconnecting WiFi...");
|
||||
while (WiFi.status() != WL_CONNECTED)
|
||||
{
|
||||
delay(100);
|
||||
}
|
||||
Serial.println("Connected WiFi!");
|
||||
}
|
||||
|
||||
void waitForMQTT() {
|
||||
if (client.connected())
|
||||
return;
|
||||
Serial.println("Reconnecting MQTT...");
|
||||
while (!client.connected())
|
||||
{
|
||||
if (!client.connect(PH_TOPIC))
|
||||
delay(50);
|
||||
}
|
||||
Serial.println("Connected MQTT!");
|
||||
}
|
||||
|
||||
void reconnect() {
|
||||
waitForWiFi();
|
||||
waitForMQTT();
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
|
||||
ads.setGain(GAIN_TWOTHIRDS);
|
||||
ads.begin();
|
||||
|
||||
pinMode(TEMPERATURE_PIN, INPUT_PULLUP);
|
||||
DS18B20.begin();
|
||||
|
||||
WiFi.begin(SSID, PASSWORD);
|
||||
reconnect();
|
||||
}
|
||||
|
||||
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) {
|
||||
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
|
||||
}
|
||||
|
||||
float readpH() {
|
||||
Serial.println("Reading pH...");
|
||||
int sum = 0;
|
||||
const int readCount = 10;
|
||||
|
||||
for (int i = 0; i < readCount; i++)
|
||||
{
|
||||
sum += ads.readADC_SingleEnded(0);
|
||||
delay(10);
|
||||
}
|
||||
|
||||
float averageRead = float(sum) / readCount;
|
||||
Serial.print("Average value: ");
|
||||
Serial.println(averageRead);
|
||||
|
||||
float voltage = 6.144 / 32768.0 * averageRead;
|
||||
voltage -= VOLTAGE_OFFSET;
|
||||
Serial.println(voltage);
|
||||
float pH = 7 - ((PH_7_VOLTAGE - voltage) / pHStep);
|
||||
return pH;
|
||||
}
|
||||
|
||||
void publishpH() {
|
||||
float pH = readpH();
|
||||
String pHString(pH, 2);
|
||||
Serial.println(pHString);
|
||||
client.publish(PH_TOPIC, pHString.c_str(), true);
|
||||
}
|
||||
|
||||
void publishTemperature() {
|
||||
DS18B20.requestTemperatures();
|
||||
float temperature = DS18B20.getTempCByIndex(0);
|
||||
String temperatureString(temperature, 2);
|
||||
Serial.println(temperatureString);
|
||||
client.publish(TEMPERATURE_TOPIC, temperatureString.c_str(), true);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
long startTick = millis();
|
||||
reconnect();
|
||||
client.loop();
|
||||
|
||||
publishpH();
|
||||
publishTemperature();
|
||||
|
||||
delay(60000 - (millis() - startTick));
|
||||
}
|
||||
|
||||
void mqttCallback(char *topic, byte *payload, unsigned int length) {
|
||||
Serial.print("Got payload: ");
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
Serial.print((char)payload[i]);
|
||||
}
|
||||
Serial.println();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue