• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь с паролем и задержкой

Qwkaaa

New member
1. В общем суть такая, необходимо поставить пароль на точку доступа которую поднимает Esp8266, но без использования АТ, т.к. команды почему-то не работают, можно ли в коде(скетче) в среде Arduino IDE как-то его запаролить.
2. Есть данный код:

// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

/*#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
*/
const char *ssid = "************"; // Имя вайфай точки доступа
const char *pass = "******************"; // Пароль от точки доступа

const char *mqtt_server = "*************"; // Имя сервера MQTT
const int mqtt_port = ************; // Порт для подключения к серверу MQTT
const char *mqtt_user = "****************"; // Логи от сервер
const char *mqtt_pass = "************8"; // Пароль от сервера

/*#define BUFFER_SIZE 100

bool LedState = false;
int tm=300;
float temp=0;
*/
// Функция получения данных от сервера

void callback(const MQTT::publish& pub)
{
Serial.print(pub.topic()); // выводим в сериал порт название топика
Serial.print(" => ");
Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных
String payload = pub.payload_string();
if(String(pub.topic()) == "test/led") // проверяем из нужного ли нам топика пришли данные
{
int stled = payload.toInt(); // преобразуем полученные данные в тип integer
digitalWrite(2,stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных
}
}



WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);

void setup() {
//sensors.begin();
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
pinMode(2, OUTPUT);
}

void loop() {
// подключаемся к wi-fi
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Connecting to ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);

if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
Serial.println("WiFi connected");
}

// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Connecting to MQTT server");
if (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Connected to MQTT server");
client.set_callback(callback);
client.subscribe("test/led"); // подписывааемся по топик с данными для светодиода
} else {
Serial.println("Could not connect to MQTT server");
}
}

if (client.connected()){
client.loop();
// TempSend();
}
}
} // конец основного цикла


// Функция отправки показаний с термодатчика
/* void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); // от датчика получаем значение температуры
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // отправляем в топик для термодатчика значение температуры
Serial.println(temp);
tm = 300; // пауза меду отправками значений температуры коло 3 секунд
}
tm--;
delay(10);
}

*/



Суть кода что он управляет ножкой GPIO2, т.к. в программе при отправки 1 включается, а при отправки - светодиод выключается, задача: сделать чтобы при отправки 1 светодиод включался на 50 миллисек., а при отправки 0 светодиод включался на 5 сек.
 

Сергей_Ф

Moderator
Команда форума
@Qwkaaa а вопрос то в чем? Все можно, делайте. АТ команды работать в Вашем скетче могут, только если Вы сами их обработаете. А так, выполняется только то что в скетче. Ставьте пароль, ставьте обработчики 0 и 1 и в них прописывайте любую логику.
 

Qwkaaa

New member
@Qwkaaa а вопрос то в чем? Все можно, делайте. АТ команды работать в Вашем скетче могут, только если Вы сами их обработаете. А так, выполняется только то что в скетче. Ставьте пароль, ставьте обработчики 0 и 1 и в них прописывайте любую логику.
Так АТ команды не работают, точку доступа которую раздает Esp8266 нужно запаролить из скетча, мне нужен именно этот фрагмент скетча и куда его вставить в коде, а так же нужен код который и будет с задержкой включать светодиод(Как сделать это на примере блютуза я знаю), а тут немного иначе. Поэтому и прошу помочь с этой частью кода
 

Сергей_Ф

Moderator
Команда форума
@Qwkaaa АТ команды работать и не должны. В примерах Ардуино ИДЕ, куча образцов, в том числе и с паролями и авторизацией. Задержка на 50 мсек, это delay(50), на 5 секунд delay(5000). Если нужно в это время что то делать - используйте millis(). Как обрабатывать http-запросы писалось тысячу раз. Какая помощь нужна? Сделать за Вас?
 

Qwkaaa

New member
@Qwkaaa АТ команды работать и не должны. В примерах Ардуино ИДЕ, куча образцов, в том числе и с паролями и авторизацией. Задержка на 50 мсек, это delay(50), на 5 секунд delay(5000). Если нужно в это время что то делать - используйте millis(). Как обрабатывать http-запросы писалось тысячу раз. Какая помощь нужна? Сделать за Вас?
А конкретный код для запараливания можете написать? Просто не могу найти нигде.
 

Qwkaaa

New member
@Qwkaaa АТ команды работать и не должны. В примерах Ардуино ИДЕ, куча образцов, в том числе и с паролями и авторизацией. Задержка на 50 мсек, это delay(50), на 5 секунд delay(5000). Если нужно в это время что то делать - используйте millis(). Как обрабатывать http-запросы писалось тысячу раз. Какая помощь нужна? Сделать за Вас?
digitalWrite(2,stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных. В коде эта строка я так понял определяет включить или выключить светодиод, в зависимости от того что я выставлю в программе на андройде, я же не помгу ниже этой строки написать такой код:?
if (val == '1')
digitalWrite(LED, LOW);
delay(50);
 

Scorpio

New member
Код:
digitalWrite(LED, LOW);
delay(50);
digitalWrite(LED, HIGH);
Погасить наверное забыли. Только 50мС на глаз и заметить сложно :)
 

Qwkaaa

New member
Код:
digitalWrite(LED, LOW);
delay(50);
digitalWrite(LED, HIGH);
Погасить наверное забыли. Только 50мС на глаз и заметить сложно :)
Я и так писал, и ставил задержку в секунду. Я делал тоже самое, но для блютуз модуля, но там я выбирал пин на который подключен светодиод и задавал условие через "если"
т.е. if (val == '1')
digitalWrite(LED, LOW);
delay(50);
digitalWrite(LED, HIGH);
Там все работало, но тут немного другой метод используется, тут не указывается какая цифра отправляется для включения, а какая для выключения
 

Сергей_Ф

Moderator
Команда форума
@Qwkaaa так сделайте так, как было в блютуз модуле. Разбираете запрос и присваиваете значение val из строки запроса.
 

Scorpio

New member
@Qwkaaa , если хотите научиться, то не достаточно просто копировать примеры. Надо пытаться разобраться в каждой строчке кода. Со временем все получится. Все с этого начинали. Кстати, судя по виду функции callback, в вашем примере, вы пользуетесь старой версией библиотеки PubSubClient. Надо бы обновить. Покажите свой проблемный кусочек кода. Мне даже интересно, что же там может не работать :)
И почитайте внимательно правила оформления постов в желтом окошке внизу, чтобы не раздражать форумчан.
 
Сверху Снизу