Ви не увійшли.
Сторінки 1
esp8266 + mqtt
Спасибо! протокол mqtt - уже собранный "велосипед", который я пытаюсь собрать.
Насколько я понял есть готовая библиотека-клиент mqtt для UNO + шилд W5100
https://github.com/mqtt/mqtt.github.io/wiki/software?id=software
Остается собрать простенький сервер-брокер на ПК/виртуалке или raspberryPi.
И что самое приятное что у esp8266 практически такие же возможности что у и UNO+WiFi
при этом цена за распаянный экземпляр ниже.
Минусы (имхо) в том что простые хостинги не предоставляют протокол mqtt, броадкаст режит фаерволл, и при выключении сервера - два клиента не могут общаться между собой. Но все решаемо.
Немного подправил код,
Основная идея: Ардуино постит значения датчиков на веб-сервер, сервер обрабатывает значения и отвечает что делать дальше Ардуине, Ардуино делает. (т.е. мозг = конфа заложенная в веб-сервер, а ардуино = руки)
Условный пример: можно задавать уровень яркости светодиода посредством внесения значения в БД веб-сервера. (далее написать авторизатор для множества ардуин и через одну веб-страничку управлять освещением улиц районов).
1. в data помещаем запрос для POST, переменным присваиваем значения датчиков Ардуины (для примера переменная test = значение 223344)
2. Отправляем пост на WEB сервер
3. Сервер отвечает контентом ОК=1, ищем совпадение в контенте "ОК=1", выполняем действия Ардуиной (например включаем светодиод)
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 };
IPAddress dnServer(8, 8, 8, 8);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress ip(192, 168, 1, 230);
EthernetClient client;
String data = "";
void setup()
{
Serial.begin(9600);
Ethernet.begin(mac, ip, dnServer, gateway, subnet);
}
void loop()
{
data = "test=223344";
if (client.connect("192.168.1.125",80))
{
client.println("POST /index.php HTTP/1.1");
client.println("Host: 192.168.1.125");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(data.length());
client.println();
client.print(data);
}
delay(1000);
while(client.connected())
{
if(client.available())
{
String c = client.readString();
if(c.indexOf("OK=1") >0) //indexOf или contains
{
//тут условия для выполнения действий Ардуиной, если найдено OK=1
}
}
}
client.stop();
delay(5000);
}
по логике , добавьте паузу в течении которой ожидаете данные
Задержка реально помогла, спасибо.
+Заменил переменную:
String c = client.readString();
что делает client.stop(); ?
https://www.arduino.cc/en/Reference/ClientStop
Насколько я понимаю посылает по протоколу окончание связи, разрывает коннект.
client.connected() становится фолс, и шилд доступен для подключения к другим серверам.
Читал что одновременно шилд тянет 2-3 подключения к внешним серверам.
Arduino UNO + шилд W5100 + внешний веб сервер
Ардуино постит данные на внешний веб-сервер.
В зависимости от отправленных данных на сервер, сервер, дает разные ответы.
Необходимо ловить ардуиной уникальный ответ от сервера на соответствующий пост и записывать значение в переменную.
Подскажите как словить ответ на пост?
client.read() не срабатывает
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 };
//можно убрать если в сети есть DHCP сервер:
IPAddress dnServer(8, 8, 8, 8);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress ip(192, 168, 1, 230);
EthernetClient client;
String data;
void setup() {
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
}
else {
Ethernet.begin(mac, ip, dnServer, gateway, subnet); //можно убрать если в сети есть DHCP сервер
Serial.println("DHCP OK");
Serial.println(Ethernet.localIP());
}
data = "";
}
void loop(){
data = "test=Karumba";
if (client.connect("192.168.1.125",80))
{
Serial.println(data);
client.println("POST /index.php HTTP/1.1");
client.println("Host: 192.168.1.125");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(data.length());
client.println();
client.print(data);
}
else
{
Serial.println("server connect failed");
}
//тут ничего не происходит
if (client.available()) {
char c = client.read();
Serial.print("RESPONSE: ");
Serial.println(c);
}
else {
Serial.println("NG");
}
if (client.connected()) {
client.stop();
}
delay(5000);
}
готовый системы смотрели? там есть много интересных ...
тот же http://secur.ua/kk/
и много других
Например готовый контроллер за 5000грн, туда входит: 1реле + программирующая схема + батарейка + сетевая + софт (аналог на китайских Ардуино+деталях 200-300грн)
Минус в быстрой взаимозаменяемости элементов готовой сборки,
при поломке придется менять дорогостоющий контроллер вцелом, а не элемент.
Завязываешься на конкретного производителя, который может быстро уйти с рынка.
"- Управление Проводная передача голоса" ? это радио точками управлять? вкл/выкл, громкость и т.д.
Другими словами "домофон на ардуино"
Гости у ворот нажимают на кнопку - активируется микрофон+динамик с одной стороны, динамик+микрофон с другой (при нажатии охраной на ответную кнопку/ответ на зуммер).
Дополнительная кнопка под рукой охранника открывает дверь (замыкает реле) и заканчивает передачу динамик-микрофон.
Нужен специалист на проект "Система контроля управления доступом"
Проект состоит из совокупности небольших проектов,
комбинации которых будут установлены на объекты управления:
- Контроль Датчики движения
- Контроль Пожарные датчики
- Контроль Датчики размыкания окон
- Управление Кодовые/кнопочные/сенсорные замки
- Управление Цифровые бесконтактные считыватели/ключи RDFID+NFC
- Управление Раидио пулты для выполнения событий постановки/открытия
- Управление Проводная передача голоса
- Управление GSM смс командами
- Контроль GPS мобильных объектов
- Управление отопительными системами
- Контроль Подсчет электроэнергии и тепла
- Контроль Управление микроклиматом (влажность)
- Управление точками электроснабжения
- Управление 36 контроллерами через центральный веб-сервер
Необходимо:
- Закупить необходимые детали
- Собрать модель
- Запрограммировать модель
- Протестировать модель
- Установить систему на объектах
Оплата за готовую модель согласно ТЗ объекта.
Оплата за монтаж. Оплата за детали.
Заинтересованным - пишите в лс.
Так же интересует вопрос с отправкой POST запросов Ардуиной в одностороннем порядке на заданный сервер.
Arduino Uno + Enc28j60
библеотека ethercard
Подскажите как правильно написать POST запрос используя библиотеку ethercard
спасибо
Вступление
Электросчетчики НИК заняли весомую долю рынка Украины
У компании НИК существуют счетчики с которых удаленно можно снять показания спец приборами,
и промышленные счетчики, которые подключаются через контроллер в Интренет и отправляют данные в КиевЭнерго, где собственно а автоматическом режиме происходит списание средств с банковского счета абонента.
Все это сертифицированно, согласованно и стоит заоблачных денег (от 20к грн).
Аналогичная реализация на Ардуино (без сертификации и согласования = для себя) нам обойдется в 100-150грн:
Ардуино уно + Фоторезистор + Ethernet Шилд HR9111 (или аналогичные детали с Aliexpress)
Принцип работы (Простой способ, не срывая пломбы с счетчика):
Фоторезистор крепят(клеят поверх крышки) на сведодиод счетчика, считают "блымки", накаунтированное значение переводят в кВатты исходя из значения счетчика imp/kWh. Далее через Езернет шилд выводят на веб, или постом загоняют во внешнюю БД на вебсервер.
Реализаций схем/кода в Интернет более чем достаточно. Но при бешанном энергопотреблении, фоторезистор не успевает точно считать количество "блымок", итоговые показания за месяц расходятся.
Принцип работы 2 (срывая пломбы счетчика)
Данный способ подразумевает точное считывания показаний счетчика.
Счетчик не состоит в Гос. учете. = "счетчик для себя/счетчик купленный на растерзание"
Для эксперимента был взял счетчик НИК 2102-04.M2.
Счетчик не автоматизирован с завода - умеет только крутить циферблат.
У счетчика есть консоль для "калибровки" - синяя колодка сбоку, контакт 14 15.
Задача:
Получить риалтайм точные значения потребления электроэнергии используя ардуино уно/нано + езернет шилд (пост запросы на sql сервер), одним из следующих методов:
1. Подключится к светодиоду напрямую, и считывать падение вольтажа (импульсы)
2. Подключится к "шаговому мотору", который крутит циферблат, и считывать напряжение. Далее перевести значение напряжения в кВатт согласно делениям/обороту циферблата.
После определенного количества "блымок" светодиода слышно отчетливый "клац" циферблата.
3. считывать ток на катушке, прикрепленной к Фазе.
Фото счетчика Ник 2102-04.М2:
https://drive.google.com/open?id=0B24sY9_hoJYdWVppR3VzODk5dUE
Сторінки 1