Народ, кому не лень, объясните, пожалуйста на пальцах, с простеньким примером, как организовать такую работу:
1.вот есть у меня ESP8266 c прошивкой от wifi-iot. в мажордомо все данные с него успешно отправляются.
2. Есть Ардуино, без интернет модуля, подключен по УСБ - им так же все успешно управляется с мажордомо.
В ардуино залит такой вот скетч:
СпойлерПоказать
int sensorValue = 0;
int sensorPin = A0;
int suho = 600;
int incomingInt = 0;
int Relay = 4; // реле 4
int Relay2 = 5; // реле 5
long previousMillis = 0;
long interval = 20000;
// переменные
int buttonState = 0; // переменная для хранения состояния кнопки
int buttonState10 = 0; // переменная для хранения состояния кнопки
const int gassensorpin = A5; //Объявляем переменную для сенсора газа, указываем пин
int gassensorvalue = 0; //Объявляем переменную для хранения значения с датчика газа и приравниваем ее к 0
boolean status;
char buf[80];
// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
Serial.println(buf);
}
// задаем константы
const int buttonPin = 8; // номер входа, подключенный к кнопке
const int buttonPin10 = 9; // номер входа, подключенный к кнопке
void setup()
{
Serial.begin(115200);
// инициализируем пины, подключенные к реле 4 и 5, как выходы
pinMode(Relay, OUTPUT);
pinMode(Relay2, OUTPUT);
// инициализируем пины, подключенные к кнопке, как входы
pinMode(buttonPin, INPUT);
pinMode(buttonPin10, INPUT);
}
void loop()
{
if (Serial.available() > 0)
{
incomingInt = Serial.parseInt();
if (incomingInt == 500) {
digitalWrite(Relay, LOW);
sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnON_ard&", 1) ;
sendHTTPRequest();
}
if (incomingInt == 600) {
digitalWrite(Relay2, LOW);
sprintf(buf, "GET /objects/?object=Switch2&op=m&m=turnON_ard&", 1) ;
sendHTTPRequest();
}
if (incomingInt == 499) {
digitalWrite(Relay, HIGH);
sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnOff_ard&", 1) ;
sendHTTPRequest();
}
if (incomingInt == 599) {
digitalWrite(Relay2, HIGH);
sprintf(buf, "GET /objects/?object=Switch2&op=m&m=turnOff_ard&", 1) ;
sendHTTPRequest();
}
}
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
if (status == true) {
digitalWrite(Relay, LOW);
status = false;
delay(200);
sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnON_ard&", 1) ;
sendHTTPRequest();
}
else
{
digitalWrite(Relay, HIGH);
status = true;
delay(200);
sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnOff_ard&", 1) ;
sendHTTPRequest();
}
}
buttonState10 = digitalRead(buttonPin10);
if (buttonState10 == HIGH) {
if (status == true) {
digitalWrite(Relay2, LOW);
status = false;
delay(200);
sprintf(buf, "GET /objects/?object=Switch2&op=m&m=turnON_ard&", 1) ;
sendHTTPRequest();
}
else
{
digitalWrite(Relay2, HIGH);
status = true;
delay(200);
sprintf(buf, "GET /objects/?object=Switch2&op=m&m=turnOff_ard&", 1) ;
sendHTTPRequest();
}
}
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
// сохраняем время последнего переключения
previousMillis = currentMillis;
sensorValue = analogRead(sensorPin);
// Serial.println(sensorValue);
if (sensorValue < 500)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=plants_wet&", 1) ;
if (sensorValue >= 500 && sensorValue < 900)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=plants_norm&", 1) ;
if (sensorValue > 900)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=Plants_dry&", 1) ;
Serial.println(sensorValue);
sendHTTPRequest();
gassensorvalue = analogRead(gassensorpin);//Считываем значение с датчика газа
if (gassensorvalue < 100)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=plants_clean&", 1) ;
if (gassensorvalue >= 100 && gassensorvalue < 300)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=plants_ok&", 1) ;
if (gassensorvalue > 300)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=Plants_gas&", 1) ;
Serial.println(gassensorvalue);
sendHTTPRequest();
}
}
int sensorPin = A0;
int suho = 600;
int incomingInt = 0;
int Relay = 4; // реле 4
int Relay2 = 5; // реле 5
long previousMillis = 0;
long interval = 20000;
// переменные
int buttonState = 0; // переменная для хранения состояния кнопки
int buttonState10 = 0; // переменная для хранения состояния кнопки
const int gassensorpin = A5; //Объявляем переменную для сенсора газа, указываем пин
int gassensorvalue = 0; //Объявляем переменную для хранения значения с датчика газа и приравниваем ее к 0
boolean status;
char buf[80];
// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
Serial.println(buf);
}
// задаем константы
const int buttonPin = 8; // номер входа, подключенный к кнопке
const int buttonPin10 = 9; // номер входа, подключенный к кнопке
void setup()
{
Serial.begin(115200);
// инициализируем пины, подключенные к реле 4 и 5, как выходы
pinMode(Relay, OUTPUT);
pinMode(Relay2, OUTPUT);
// инициализируем пины, подключенные к кнопке, как входы
pinMode(buttonPin, INPUT);
pinMode(buttonPin10, INPUT);
}
void loop()
{
if (Serial.available() > 0)
{
incomingInt = Serial.parseInt();
if (incomingInt == 500) {
digitalWrite(Relay, LOW);
sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnON_ard&", 1) ;
sendHTTPRequest();
}
if (incomingInt == 600) {
digitalWrite(Relay2, LOW);
sprintf(buf, "GET /objects/?object=Switch2&op=m&m=turnON_ard&", 1) ;
sendHTTPRequest();
}
if (incomingInt == 499) {
digitalWrite(Relay, HIGH);
sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnOff_ard&", 1) ;
sendHTTPRequest();
}
if (incomingInt == 599) {
digitalWrite(Relay2, HIGH);
sprintf(buf, "GET /objects/?object=Switch2&op=m&m=turnOff_ard&", 1) ;
sendHTTPRequest();
}
}
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
if (status == true) {
digitalWrite(Relay, LOW);
status = false;
delay(200);
sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnON_ard&", 1) ;
sendHTTPRequest();
}
else
{
digitalWrite(Relay, HIGH);
status = true;
delay(200);
sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnOff_ard&", 1) ;
sendHTTPRequest();
}
}
buttonState10 = digitalRead(buttonPin10);
if (buttonState10 == HIGH) {
if (status == true) {
digitalWrite(Relay2, LOW);
status = false;
delay(200);
sprintf(buf, "GET /objects/?object=Switch2&op=m&m=turnON_ard&", 1) ;
sendHTTPRequest();
}
else
{
digitalWrite(Relay2, HIGH);
status = true;
delay(200);
sprintf(buf, "GET /objects/?object=Switch2&op=m&m=turnOff_ard&", 1) ;
sendHTTPRequest();
}
}
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
// сохраняем время последнего переключения
previousMillis = currentMillis;
sensorValue = analogRead(sensorPin);
// Serial.println(sensorValue);
if (sensorValue < 500)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=plants_wet&", 1) ;
if (sensorValue >= 500 && sensorValue < 900)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=plants_norm&", 1) ;
if (sensorValue > 900)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=Plants_dry&", 1) ;
Serial.println(sensorValue);
sendHTTPRequest();
gassensorvalue = analogRead(gassensorpin);//Считываем значение с датчика газа
if (gassensorvalue < 100)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=plants_clean&", 1) ;
if (gassensorvalue >= 100 && gassensorvalue < 300)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=plants_ok&", 1) ;
if (gassensorvalue > 300)
sprintf(buf, "GET /objects/?object=Plant1&op=m&m=Plants_gas&", 1) ;
Serial.println(gassensorvalue);
sendHTTPRequest();
}
}
Подскажите, как правильней и дешевле это можно сделать?
1. Можно ли для этих целей использовать ESP8266? Что тогда нужно изменить в скетче? И какие настройки делать в ЕСП, чтобы через него данные с ардуины уходили в мажордомо и обратно?
2. Или, как я понимаю, будет проще купить модуль для ардуины?Какой лучше - W5100 или enc28j60 ? И что в этом случае изменить в скетче, чтобы данные шли по сети?
Огромное спасибо, если поможете. Всю голову уже сломал над этим вопросом))