• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
заливаю всё без ошибок если назначаю кнопку на светодиод то он загорается и гаснет из приложения
но при нажатии кнопки хардовой ничего не происходит не могу понять где что не так .
Да вот я так же не могу решить эту проблему, что-то не так с логикой, но не могу одолеть
 
Сверху Снизу