// пин подключения реле D5 , чип esp8266, замеряем
//напряжение до 30 вольт через ina226 и включаем свет,
// v0 это память напряжения , v9 это память для вкл света
#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina219;
#include <OneWire.h>
#include <ESP8266WiFi.h>
#define INA226_ADDRESS 0x40 // Адрес INA226 на шине I2C
// Указание пинов GPIO, используемых для программной реализации I2C
#define SDA_PIN 12
#define SCL_PIN 13
// Инициализация программной реализации I2C
TwoWire myWire = TwoWire();
//--- SETTINGS ------------------------------------------------
const char* ssid = "T34"; // WIFI наменование
const char* password = "19680527"; // WIFI пороль
WiFiServer server(8000); // Server port
IPAddress ip(192, 168, 43, 67);
IPAddress gateway(192, 168, 1, 1);
#include "VirtuinoCM.h"
VirtuinoCM virtuino;
#define V_memory_count 32 // the size of V memory. You can change it to a number <=255)
float V[V_memory_count]; // This array is synchronized with Virtuino V memory. You can change the type to int, long etc.
boolean debug = true;
float V1_lastValue = 0;
//=========================
void setup() {
Serial.begin(9600);
Wire.begin();
myWire.begin(SDA_PIN, SCL_PIN); // Инициализация программной I2C
pinMode(D5, OUTPUT);
digitalWrite(D5, LOW); // Устанавливаем начальное состояние пина (выключен)
virtuino.begin(onReceived, onRequested, 256);
virtuino.key = "1234";
connectToWiFiNetwork(); // 1
server.begin();
}
//==================
void loop() {
virtuinoRun();
// Запуск измерения напряжения
Wire.beginTransmission(INA226_ADDRESS);
Wire.write(0x02); // Регистр, содержащий напряжение
Wire.endTransmission(false); // Передача без остановки шины
Wire.requestFrom(INA226_ADDRESS, 2); // Запрос 2 байт данных
// Чтение и обработка данных
if(Wire.available() >= 2) {
int16_t value = Wire.read() << 8 | Wire.read();
float voltage = value * 1.25 / 1000;
Serial.print("Напряжение: ");
Serial.print(voltage);
Serial.println(" В");
V[0] =voltage ; ;//вывод на виртуино
}
if (V[9] >= 3) {
digitalWrite(D5, HIGH); // если значение Virtuino на пине V9 больше или равно 3, то включаем реле на пине D5
} else if (V[9] < 1) {
digitalWrite(D5, LOW); // если значение Virtuino на пине V9 меньше 1, то выключаем реле на пине D5
}
// Чтение напряжения (в вольтах)
float voltage = ina219.getBusVoltage_V();
delay(100);
}
void connectToWiFiNetwork() {
Serial.println("Connecting to " + String(ssid));
// If you don't want to config IP manually disable the next two lines
IPAddress subnet(255, 255, 255, 0); // set subnet mask to match your network
WiFi.config(ip, gateway, subnet); // If you don't want to config IP manually disable this line
WiFi.mode(WIFI_STA); // конфигурация сети вай фай
WiFi.begin(ssid, password); //конфигурация сети вай фай
while (WiFi.status() != WL_CONNECTED) {
delay(500); // остановка программы
Serial.print("."); // пишит точку при ожидании подключения к сети
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println(WiFi.localIP()); // пишит ар
}
void onReceived(char variableType, uint8_t variableIndex, String valueAsText) {
if (variableType == 'V') {
float value = valueAsText.toFloat(); //преобразует значение в значение с плавающей точкой. Значение текста ��олжно быть числовым
if (variableIndex < V_memory_count) V[variableIndex] = value; //скопируйте полученное значение в массив памяти arduino V
}
}
String onRequested(char variableType, uint8_t variableIndex) {
if (variableType == 'V') {
if (variableIndex < V_memory_count) return String(V[variableIndex]); // возвращает значение массива памяти arduino V
}
return "";
}
void virtuinoRun() {
WiFiClient client = server.available();
if (!client) return;
if (debug) Serial.println("Connected");
unsigned long timeout = millis() + 3000; // задержка на 3 секунды
while (!client.available() && millis() < timeout) delay(1);
if (millis() > timeout) {
Serial.println("timeout");
client.flush();
client.stop();
return;
}
virtuino.readBuffer = ""; // очистите буфер ввода Virtuino. Входной буфер хранит входящие символы
while (client.available() > 0) {
char c = client.read(); // считывать входящие данные
virtuino.readBuffer += c; // добавьте входящий символ в буфер без ввода
if (debug) Serial.write(c);
}
client.flush();
if (debug) Serial.println("\nReceived data: " + virtuino.readBuffer);
String* response = virtuino.getResponse(); // получите текст, который должен быть отправлен Virtuoso в качестве ответа. Библиотека проверит входной буфер и создаст текст ответа
if (debug) Serial.println("Response : " + *response);
client.print(*response);
client.flush();
delay(10);
client.stop();
if (debug) Serial.println("Disconnected");
}
//============================================================== vDelay
void vDelay(int delayInMillis) {
long t = millis() + delayInMillis;
while (millis() < t) virtuinoRun();
}
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев