• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Wemos D1 mini+ttp223 помощь с кодом

diablos

New member
Приветствую
Просьба помочь с кодом, уже сломал голову, никак не получается правильно написать, хотя использовал разные варианты примеров.

Итак, есть
1) Модуль реле на 8 твердотельных реле
http://www.haoyuelectronics.com/Attachment/Single-Solid-Relay-Module/Eight-Solid-Relay-Module-2.jpg

2) Wemos D1 mini
3) Тач модули ttp223 с соединенной перемычкой на B
https://ae01.alicdn.com/kf/HTB1qrry...-b-font-font-b-Touch-b-font-font-b-Switch.jpg

Проблема в том, что я не могу заставить работать нормально и тач кнопки и например Blynk или через HTML страницы и.т.д
Хотя пробовал точные примеры, разнообразные, но безуспешно, либо работают корректно кнопки, но не работает второй способ управления, либо к примеру корректно работает Blynk, но не работают тач кнопки, или через раз срабатывают, или реле мигает.

Вот код, для Blynk
Код:
#define RELE D6
#define BUTTON D5
#include <ArduinoOTA.h>//OTA
#include <ESP8266mDNS.h>//OTA
#include <WiFiUdp.h>//OTA
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
bool rele;

char auth[] = "****************";
char ssid[] = "****************";
char pass[] = "****************";


const int ledPin2 = D3;
const int btnPin2 = D2;


// Every time we connect to the cloud...
BLYNK_CONNECTED() {
  // Request the latest state from the server
  Blynk.syncVirtual(V1, V2);
// Blynk.syncAll();
}

// When App button is pushed - switch the state
BLYNK_WRITE(V1) {
  rele = param.asInt();
  digitalWrite(RELE, rele);
}

void setup() {
  Serial.begin(115200);
/**************для OTA прошивки********************/
  WiFi.mode(WIFI_STA);
  Blynk.begin(auth, ssid, pass);
  while (Blynk.connect() == false) {}
  ArduinoOTA.setHostname("HALL"); //Your ESP Name
  ArduinoOTA.begin();
/***************************************************/
  pinMode(RELE, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  digitalWrite(RELE, rele);
}

void loop()
{
   if (digitalRead(BUTTON))
  {
      rele != rele;
      digitalWrite(RELE, rele);
    Blynk.virtualWrite(V1, rele);
      delay (200);
  }
  Blynk.run();
  ArduinoOTA.handle();
}

При таком коде, реле мигает при нажатии на тач кнопку, но отлично работает из Blynk.
 

arbuzmaster

New member
Код:
int switchPin = 4;                        // пин кнопки  № 1
int ledPin = 12;                          // пин светодиода № 1
boolean ledOn = true;                     // Начальное состояние светодиода  № 1
boolean lastButton = false;               // предыдущее состояние кнопки  № 1
boolean currentButton = false;            // текущее состояние кнопки  № 1
void setup() {
 /* Активация выходов */
  pinMode (ledPin, OUTPUT);
  /* Активация входов */
  pinMode (switchPin, INPUT_PULLUP);
}
void loop()
{
    currentButton = debounce (lastButton); // получаем состояние кнопки без дребезга
  if (lastButton == false && currentButton == true) { // если кнопка была нажата дольше 5 мсек,
 
 
       ledOn = !ledOn; // то меняем состояние светодиода
  }
  lastButton = currentButton; // обнуляем состояние нажатия кнопки
  digitalWrite (ledPin, ledOn); // зажигаем/гасим светодиод
 }
boolean debounce(boolean last) {
  boolean current = digitalRead(switchPin); // считываем текущее состояние кнопки
  if (last != current) { // если состояние изменилось
    delay(5); // делаем задержку на 5 мсек, пока уляжется дребезг
    current = digitalRead(switchPin); // и считываем снова
  }
  return current; // возвращаем текущее состояние кнопки
}
Как то, так работает без всяких перемычек(нажал - включение, нажал - выключение), было сделано для обычной кнопки, потом просто подключил сенсорную.
 

diablos

New member
Как то, так работает без всяких перемычек(нажал - включение, нажал - выключение), было сделано для обычной кнопки, потом просто подключил сенсорную.
Все та же проблема((
Добавил в код Blynk, с ним все работает как нужно, а с кнопкой проблема, работает только когда светодиод горит.
То есть,
нажал - светодиод загорелся - включилось реле
нажал - светодиод потух - ноль реакции на реле
нажал - светодиод загорелся - выключилось реле
нажал - светодиод потух - ноль реакции
и.т.д

Код:
int switchPin = 4;                        // пин кнопки  № 1
int ledPin = 12;                          // пин светодиода № 1
boolean ledOn = true;                     // Начальное состояние светодиода  № 1
boolean lastButton = false;               // предыдущее состояние кнопки  № 1
boolean currentButton = false;            // текущее состояние кнопки  № 1

BLYNK_CONNECTED() {
  // Request the latest state from the server
  Blynk.syncVirtual(V1);
// Blynk.syncAll();

}

// When App button is pushed - switch the state
BLYNK_WRITE(V1) {
  ledOn = param.asInt();
  digitalWrite(ledPin, ledOn);
}

void setup() {
/* Активация выходов */
  pinMode (ledPin, OUTPUT);
  /* Активация входов */
  pinMode (switchPin, INPUT_PULLUP);
}
void loop()
{
    currentButton = debounce (lastButton); // получаем состояние кнопки без дребезга
  if (lastButton == false && currentButton == true) { // если кнопка была нажата дольше 5 мсек,
       ledOn = !ledOn; // то меняем состояние светодиода
  }
  lastButton = currentButton; // обнуляем состояние нажатия кнопки
  digitalWrite (ledPin, ledOn); // зажигаем/гасим светодиод
   Blynk.virtualWrite(V1, ledOn);
}
boolean debounce(boolean last) {
  boolean current = digitalRead(switchPin); // считываем текущее состояние кнопки
  if (last != current) { // если состояние изменилось
    delay(5); // делаем задержку на 5 мсек, пока уляжется дребезг
    current = digitalRead(switchPin); // и считываем снова
  }
  return current; // возвращаем текущее состояние кнопки
}
 

diablos

New member
Ну тогда фиг его знает, что там у Вас, вот как работает без перемычек https://goo.gl/photos/Nh4KQ7HNnS11uH677
Да вроде все просто, соединил все плюсы и минусы esp+TT223+реле, на один пин реле, на второй тач. Тач и реле питаются от Wemos, но пробовал и от 18650, но ведь в питании не может быть дело? и перемычка вроде как на A запаяна тоже верно....я уже не знаю что и делать, я пока что при этом не особо ас в этих всех вещах...поэтому опыта не хватает, додуматься в чем дело
 

diablos

New member
При этом, если на прямую подключить тач кнопку к реле, так же все работает прекрасно! Но вот код упорно не работает
 

diablos

New member
Блин, вот я дурень!!! так замахался этим, что даже не увидел, что перемычку то я запаял на B, а не на A!!! Вот потому так и было, хотя не понятно, почему тогда на прямую, на реле работало нормально. Все это сбило с толку и я почему-то был уверен, что на А стоит перемычка )
 
Блин, вот я дурень!!! так замахался этим, что даже не увидел, что перемычку то я запаял на B, а не на A!!! Вот потому так и было, хотя не понятно, почему тогда на прямую, на реле работало нормально. Все это сбило с толку и я почему-то был уверен, что на А стоит перемычка )
Здравствуйте , я так понял вы проблему решили но немного не понятно какой код использовали . Помогите пожалуйста.
Проблема довольно похожая.
пользуюсь примером от блинка Blynk Example Browser
прописываю пины (единственное что меняю) и втыкаю проводки
const int ledPin = 14; D5 на вемосе d1 мини
const int btnPin = 12; D6
заливаю всё без ошибок если назначаю кнопку на светодиод то он загорается и гаснет из приложения
но при нажатии кнопки хардовой ничего не происходит не могу понять где что не так .
 
Последнее редактирование:

Yura_163

New member
Всем доброго времени суток! Помогите скрестить код. Вот к этому нужно добавить четыре сенсора TTP223 параллельно HTML кнопкам.
Код:
//подключаем необходимые библиотеки
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

IPAddress ip(192, 168, 1, 50); //Адрес Wi-Fi модуля
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

MDNSResponder mdns;
//параметры подключения к точке доступа
const char* ssid = "Yurok_2017";
const char* password = "00000000000000";
//определяем вэб сервер на 80 порту
ESP8266WebServer server(80);
//html страница
String webPage = "";
//задаем переменные для GPIO
int gpio0_pin = 0;
int gpio4_pin = 4;
int gpio5_pin = 5;
int gpio14_pin = 14;

void setup(void){
      //наша стартовая страница
  webPage += "<!DOCTYPE HTML>\r\n<html><head><meta charset=\"utf-8\"><title></title>";
  webPage += "</head><meta http-equiv=\"refresh\" content=\"20;URL=http://192.168.1.50\"><center>";//Адрес перенаправления (должен
                                                                                           //быть тот же, что и адрес модуля)
  webPage += "";
  webPage += "<br>";
  webPage += "<p>Светодиодная подцветка <a href=\"gpio0on\"><button>ВКЛ</button></a>&nbsp;<a href=\"gpio0off\"><button>ВЫКЛ</button></a></p>";
  webPage += "<p>Точечный свет <a href=\"gpio4on\"><button>ВКЛ</button></a>&nbsp;<a href=\"gpio4off\"><button>ВЫКЛ</button></a></p>";
  webPage += "<p>Лампочки Эдисона <a href=\"gpio5on\"><button>ВКЛ</button></a>&nbsp;<a href=\"gpio5off\"><button>ВЫКЛ</button></a></p>";
  webPage += "<p>Лампа Эдисона <a href=\"gpio14on\"><button>ВКЛ</button></a>&nbsp;<a href=\"gpio14off\"><button>ВЫКЛ</button></a></p>";
  webPage += "</center></html>\r\n\r\n";
      //определяем назначения GPIO
  pinMode(gpio0_pin, OUTPUT);
  pinMode(gpio4_pin, OUTPUT);
  pinMode(gpio5_pin, OUTPUT);
  pinMode(gpio14_pin, OUTPUT);
      //определяем параметры GPIO
  digitalWrite(gpio0_pin, LOW);
  digitalWrite(gpio4_pin, LOW);
  digitalWrite(gpio5_pin, LOW);
  digitalWrite(gpio14_pin, LOW);
      //параметры последовательного порта
  Serial.begin(115200);
      //подключаемся к точке доступа
  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet);
  Serial.println("");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP adress: ");
  Serial.println(WiFi.localIP());
      //задаем DNS имя без .local, доступ к модулю возможен по DNS имени http://esp8266.local
  if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  }
      //определяем что будет запускаться при переходе на главную страницу
  server.on("/", [](){
    server.send(200, "text/html", webPage);
  });
  server.on("/gpio0on", [](){
    server.send(200, "text/html", webPage);
digitalWrite(gpio0_pin, LOW);
  });
  server.on("/gpio0off", [](){
    server.send(200, "text/html", webPage);
digitalWrite(gpio0_pin, HIGH);
  });
  server.on("/gpio4on", [](){
    server.send(200, "text/html", webPage);
digitalWrite(gpio4_pin, LOW);
  });
  server.on("/gpio4off", [](){
    server.send(200, "text/html", webPage);
digitalWrite(gpio4_pin, HIGH);
  });
  server.on("/gpio5on", [](){
    server.send(200, "text/html", webPage);
digitalWrite(gpio5_pin, LOW);
  });
  server.on("/gpio5off", [](){
    server.send(200, "text/html", webPage);
digitalWrite(gpio5_pin, HIGH);
  });
  server.on("/gpio14on", [](){
    server.send(200, "text/html", webPage);
digitalWrite(gpio14_pin, LOW);
  });
  server.on("/gpio14off", [](){
    server.send(200, "text/html", webPage);
digitalWrite(gpio14_pin, HIGH);
  });
      //запуск сервера
  server.begin();
  Serial.println("HTTP server started");
}
      //основной цикл 
void loop(void){
  server.handleClient();
}
 

diablos

New member
Я так проблему и не решил в результате.
Что-то не вяжется у меня с логикой и я никак не могу понять, как написать правильно.

Вот так работает по сенсорной кнопке, но не работает в Blynk, нажимаешь виртуальную кнопку, релешка мигнет и снова изменит состояние на старое
Модуль реле Low Level Trigger
Помогите, у кого с логикой лучше, чем у меня((

Код:
#include <WiFiClient.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>


char auth[] = "========";
char ssid[] = "========";
char pass[] = "=====";

const int RelayPin = D6;
const int BTN_PIN1 = D5;

const int RelayPin2 = D2;
const int btnPin2 = D3;
byte currentValue1 = digitalRead(BTN_PIN1);
byte lastValue1 = HIGH;

SimpleTimer timer;


BLYNK_CONNECTED() {
  Blynk.syncVirtual(V1);
}

BLYNK_WRITE(V1) {
  lastValue1 = param.asInt();
  digitalWrite(RelayPin, lastValue1);
}


void setup() {

  Blynk.begin(auth, ssid, pass);
  while (Blynk.connect() == false) {}
   pinMode(BTN_PIN1, INPUT_PULLUP);
   pinMode(RelayPin, OUTPUT);
   timer.setInterval(100L, checkPhysicalButton);
}

void checkPhysicalButton()
{
  // Button Down
  byte currentValue1 = digitalRead(BTN_PIN1);
  if (currentValue1 != lastValue1) {  // if state changes
    lastValue1 = currentValue1;      // save new state
    if (lastValue1 == LOW) {
    Blynk.virtualWrite(V1, currentValue1);
    digitalWrite(RelayPin, currentValue1);
    }
  else {
  Blynk.virtualWrite(V1, currentValue1);
    digitalWrite(RelayPin, currentValue1);
  }
  }
}

void loop() {
  Blynk.run();
  timer.run();
}
 

diablos

New member
Здравствуйте , я так понял вы проблему решили но немного не понятно какой код использовали . Помогите пожалуйста.
Проблема довольно похожая.
пользуюсь примером от блинка Blynk Example Browser
прописываю пины (единственное что меняю) и втыкаю проводки
const int ledPin = 14; D5 на вемосе d1 мини
const int btnPin = 12; D6
заливаю всё без ошибок если назначаю кнопку на светодиод то он загорается и гаснет из приложения
но при нажатии кнопки хардовой ничего не происходит не могу понять где что не так .
Да вот я так же не могу решить эту проблему, что-то не так с логикой, но не могу одолеть
 
Сверху Снизу