Страница 18 из 23

Re: Подключение железа к AMS

Добавлено: Пн ноя 05, 2018 8:59 am
shemnik69
Всем доброе время суток! Вот появилось немного времени, нашёл интересную библиотеку модбус. Для ecp 8266 причем tsp/ip т.е. может быть мастером сети. Кстати на гитхабе очень много интересных примеров. Конечно не каждый подходит но взять саму идею можно. Вот ссылка https://github.com/andresarmento/modbus-arduino

Re: Подключение железа к AMS

Добавлено: Чт ноя 08, 2018 11:50 pm
ser009
Какие приборы вы планируете подключать по rs485?

Re: Подключение железа к AMS

Добавлено: Вт янв 29, 2019 8:08 pm
sergejb52
вот вам модбас для эрески

Re: Подключение железа к AMS

Добавлено: Пт фев 01, 2019 8:06 pm
sarstab
всем привет парни.подскажите что надо прописать чтобы вывести температуру с датчика на OLED I2C 128*64 SSD1306 дисплей,дисплей подключил на 9 и 10 пины есп12 ,могу выводить любые надписи,картинки,шрифты,а вот как заставить выводить температуру всю голову сломал, надеюсь на вашу помощь :D

Код: Выделить всё

// modules
#define RTC_FEATURE
#define NTP_FEATURE
#define HTTP_FEATURE
//#define FTP_FEATURE
#define SEND_FEATURE
#define MAJORDOMO_FEATURE
//#define LAURENT_FEATURE
//#define CONTACTS_FEATURE
#define PIRS_FEATURE
#define TEMP_FEATURE
//#define LEDS_FEATURE
#define KEYS_FEATURE
#define Rain_FEATURE
// debug
#define ELECTRO_DEBUG
#define EVENTS_CONTACTS
#define EVENTS_PIRS
#define TEMP_DEBUG
#define SERIAL_PRINT
#define EVENTS_Rain
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <FS.h>
#include <Time.h>

#include "SSD1306.h"
#include <Wire.h> 
#include "font.h"   // Файл с шрифтом
#include "image.h"  // Файл с картинкой

// Инициализируем дисплей подключенный к пинам D2 и D1
SSD1306  display(0x3c, 9, 10);


char const SELF_NAME[] = "ESP8266-47";
byte SELF_IP[] = {192, 168, 1, 47};

// Authorization
#define AUTH_OFF 0
#define AUTH_ON  1
byte authMode = AUTH_OFF;
// online encode: base64encode.org
String AUTH_HASH = "Authorization: admin ams"; // admin:ams

// time provider
#define TIME_NONE    0
#define TIME_NETWORK 1
#define TIME_RTC     2
byte timeProvider = TIME_NETWORK;

// modules
#define MODUL_DISABLE       0
#define MODUL_ENABLE        1
#define MODUL_NOT_COMPILLED 2
byte modulRtc      = MODUL_NOT_COMPILLED;
byte modulNtp      = MODUL_NOT_COMPILLED;
byte modulSend     = MODUL_NOT_COMPILLED;
byte modulMajor    = MODUL_NOT_COMPILLED;
byte modulLaurent  = MODUL_NOT_COMPILLED;
byte modulPirs     = MODUL_NOT_COMPILLED;
byte modulContacts = MODUL_NOT_COMPILLED;
byte modulTemp     = MODUL_NOT_COMPILLED;
byte modulLeds     = MODUL_NOT_COMPILLED; 
byte modulKeys     = MODUL_NOT_COMPILLED;
byte modulFtp      = MODUL_NOT_COMPILLED;
byte modulRain     = MODUL_NOT_COMPILLED;
byte modulEthernet = MODUL_NOT_COMPILLED;
byte modulSd       = MODUL_NOT_COMPILLED;
byte modulServer   = MODUL_NOT_COMPILLED;
byte modulPing     = MODUL_NOT_COMPILLED;
byte modulUpload   = MODUL_NOT_COMPILLED;
byte modulElectro  = MODUL_NOT_COMPILLED;
byte modulNoo      = MODUL_NOT_COMPILLED;
byte modulMr1132   = MODUL_NOT_COMPILLED;
byte modulNrf24    = MODUL_NOT_COMPILLED;

// timers
boolean cycle1s  = false;
boolean cycle4s  = false;
boolean cycle20s = false;
boolean cycle30s = false;
boolean cycle1m  = false;
boolean cycle3m  = false;
boolean cycle5m  = false;

// strings
char buf[200];

// for sample Ajax
boolean LED_state[4] = {0};


#ifdef LEDS_FEATURE
  // LED modes
  #define LED_EMPTY 0
  #define LED_PIR 1
  byte modeLed = LED_EMPTY;
#endif

/* setup
------------------------------------- */

void setup() {
  Serial.begin(115200);
  Serial.print(F("\nAMS for "));
  Serial.print(SELF_NAME);
  Serial.println(" started...");
  hardwareInit();
  timersInit();
  wifiInit();
  spiffsInit();
  randomInit();
  eepromInit();
  ntpInit();
 rtcInit();
  #ifdef HTTP_FEATURE
    httpInit();
  #endif
  #ifdef FTP_FEATURE
    ftpInit();
  #endif
  serverInit();
  #ifdef MAJORDOMO_FEATURE
    majordomoInit();
  #endif
  #ifdef LAURENT_FEATURE
    laurentInit();
  #endif
  #ifdef TEMP_FEATURE
    tempInit();
  #endif
  #ifdef CONTACTS_FEATURE
    contactsInit();
  #endif
  #ifdef PIRS_FEATURE
    pirsInit();
  #endif
  #ifdef LEDS_FEATURE
    ledsInit();
  #endif
  #ifdef KEYS_FEATURE
    keysInit();
  #endif
  #ifdef Rain_FEATURE
   RainInit();
  #endif
  Serial.print(F("GLOBAL Init DONE ("));
  Serial.print(millis() / 1000);
  Serial.println(F("s)\n"));
  Serial.println(F("AMS WORK"));
  timeStamp(); printFreeMem("");

 // Первоначальные настройки дисплея
  display.init();
  display.flipScreenVertically();
  display.setFont(ArialMT_Plain_10);

} // setup

/* setup
------------------------------------- */

void loop() {
  timersWorks();
  rtcWorks();
  //clockWork();
  
  #ifdef HTTP_FEATURE
    httpWork();
  #endif
  #ifdef FTP_FEATURE
    ftpWork();
  #endif
  
  serverWorks();
  
  #ifdef TEMP_FEATURE
    if (cycle3m) {tempWorks();}
  #endif
  #ifdef CONTACTS_FEATURE
    contactsWorks();
  #endif
  #ifdef PIRS_FEATURE
    pirsWorks();
  #endif
  #ifdef KEYS_FEATURE
    keysWorks();
  #endif

#ifdef Rain_FEATURE
  if (cycle5m) {RainWorks();}
  #endif
  
  #ifdef LAURENT_FEATURE
    if (cycle5m) {
      sprintf(buf, "$KE");
      sendLaurentRequest();
    }
  #endif

  if (cycle20s) {
    //
  }

  if (cycle1m) {
    timeStamp(); printFreeMem("");
  }

  // end loop works
  cyclosInSecWork();
  cyclosDelayWork();
  eraseCyclos();

display.clear();                             // Очищаем экран от предыдущих данных
  display.setTextAlignment(TEXT_ALIGN_CENTER); // Выравниваем текст по центру
  display.setFont(Chewy_24);                   // Подключаем созданный нами шрифт
  display.drawString(64, 8, "MAJORDOMO");  // Первая строка в координаты 64 по оси X и 8 по оси Y выводим любой текст
  display.drawString(64, 32, "2019");          // Вторая строка
  display.display();                           // Выводим все на экран
  delay(750);

  // see http://blog.squix.org/2015/05/esp8266-nodemcu-how-to-create-xbm.html
  display.clear();
  display.drawXbm(34, 14, Volk_width, Volk_height, Volk_bits);  // Рисуем нашу картинку
  display.display();
  delay(750);

  display.clear();
  display.setTextAlignment(TEXT_ALIGN_CENTER);
  display.setFont(ArialMT_Plain_24);            // Стандартный шрифт из библиотеки
  display.drawString(64, 8, "********");  //выводим любой текст
  display.drawString(64, 32,"********" + String(********) + "C"); //выводим любой текст,выводим значение
 
  display.display();
  delay(750);
  
} // loop

Re: Подключение железа к AMS

Добавлено: Пт фев 01, 2019 9:29 pm
serghei
Привет! То есть экран работает и можешь вывести любой текст ? Заметь , что он выводится в кавычках. Попробуй вместо текста на это место вывести значение из функции. Какие значения у тебя есть? Если это далласы ( #define TEMP_FEATURE ),то

Код: Выделить всё

display.drawString(64, 32, current_temp[0]);
Вместо current_temp[0] попробуй [1] , [2] . Тогда выведутся другие градусники. Я подключал OLED дисплей на 1.3 дюйма к ESP32 и там немного другая библиотека , но смысл везде одинаковый.

И кстати , сервер при этом не грузиться ? С LCD экраном у меня всегда показывало 10 % нагрузки.

PS/ Я использовал библиотеку #include "SSD1306Wire.h" Там как то попроще было с выводом

Re: Подключение железа к AMS

Добавлено: Пт фев 01, 2019 10:21 pm
sarstab
'current_temp' was not declared in this scope
может надо в самой вкдадке ртемп прописывать все для олед дисплея?

Re: Подключение железа к AMS

Добавлено: Пт фев 01, 2019 10:30 pm
serghei
Попробуй все что выводит температуру , перенеси в ту вкладку. Или объяви её как глобальную в самом начале перед сепапом. Я уже и забыл сам.

Re: Подключение железа к AMS

Добавлено: Пт фев 01, 2019 10:37 pm
sarstab
нет друг мой ничего не получается

Re: Подключение железа к AMS

Добавлено: Пт фев 01, 2019 10:44 pm
serghei
Дай доступ через вьювер

Re: Подключение железа к AMS

Добавлено: Сб фев 02, 2019 9:59 pm
shemnik69
Доброе время суток!
Сперва фото.
Это АМS . на все про все ушло примерно две недели вечерних посиделок...
Почему такой вид.
Перепробовал несколько вариантов и в корпусах и модули и пр. но после реальных работ с оборудованием пришел к выводу что должно быть так.
Т.е раздельные платы ввода / выходы, реле и пр.
На плате Мега 256R3, интернет Шилд W5500 (Enternet2) RGB ключи, LCD 2004. GSM SIM900, усилитель для динамиков TDA2822, DFPlayer, MAX485 (для MODBUS), RTS MAX1307. 8 реле (пока, всего по плану 16). 16 опто раз-вязаные порты ввода (с раздельным питанием), блок питания 5 в 3 А, блок без перебойного питания для заряда аккумулятора. Входа, для 3 датчиков типа DHT (22/11) и DS18b20 ( пока 8 шт)
Пока плат 3 всего их планируется 4 т.е. еще реле 8 шт. модуль SD Card, датчик давления и пр. ну и еще несколько блоков .
Пока они в проекте.
Что получилось.
1. реально работающее устройство которое как самодостаточное так и в связке с остальной "сворой" контроллеров. Ну и конечно же MD!!!
есть все платы а вот скетч в разработке.... ой и трудная зараза. Проще платы спаять.
На данный момент АМС в наладке, настраиваю MQTT посылки на сервер. Также еще не отработан механизм пере прошивки по сети.
Но все будет решено.
Сразу отмечу что схема как таковая отсутствует, все на типовых стандартных решениях ... конечно если будут вопросы то отвечу.
А в целом доволен.
Также укажу что АМС тут не полноценный а взяты основные модули
[spoiler][/spoiler]