Настраивал UART через АТ-команды, случайно выставил "рукопожатие" через RTS/CTS. Теперь модуль ни на что не отзывается, и хард резет АТ-командой сделать не могу( Как сбросить эти настройки?
Брал такую. Классическую. Похоже на 01. Стандартная схема подключения, ожидаемая реакция на стандартные команды. Работает. Питается от 3,3 леонарды, сигналы напрямую к РХ-ТХ.
Всем добрый день и всех с наступающими праздниками.
Возник вот такой вопрос(задача).
Есть устройство на arduino и esp8266 07. На нем поднят TCP сервер. Прошивка старая 0018000902.
Хочеться сделать переодичную проверку устройства на наличие подключения к сети (как пример перезагрузился роутер). И если его нет делать переподключение устройства к сети.
Как бы это лучше реализовать???
Если переодично дергать AT+CIPSTATUS, то оно не меняеться( роутер включен/ роутер выключен) . делать отправку сообщения и ловить ответ не хочется.
Подскажите пожалуйста, можно ли используя этот модуль:
1)Средствами wifi передать этому модулю к примеру число с компьютера.
2)Запрограммировать модуль так, чтобы после того, как он принял это число - он передал его Arduin'e.
3)Собственно запрограммировать Arduin'у, на прием данного числа от этого модуля?
Со стороны это так: нажал на кнопку на компьютере - загорелся светодиод.
(ПК > данный модуль > arduino зажигает нужный светодиод, в зависимости от нажатой кнопки)
Подскажите пожалуйста, можно ли используя этот модуль:
1)Средствами wifi передать этому модулю к примеру число с компьютера.
2)Запрограммировать модуль так, чтобы после того, как он принял это число - он передал его Arduin'e.
3)Собственно запрограммировать Arduin'у, на прием данного числа от этого модуля?
Со стороны это так: нажал на кнопку на компьютере - загорелся светодиод.
(ПК > данный модуль > arduino зажигает нужный светодиод, в зависимости от нажатой кнопки)
Можно, конечно. Более того это можно сделать даже без ардуино (только запрограммировать сам модуль). Но, судя по постановке вопроса, Вы в этом слабо разбираетесь и вряд ли Вас тут кто-то этому научит, имхо.
Если я правильно понимаю, то нужно установить коннект пк с модулем(одно из них сервер, другое - клиент), и далее AT+CIPSEND отправлять цифру. А в модуле эта цифра будет обрабатываться, и выводить сигнал на нужный OUTPUT?
День добрый форумчане! Есть задумка сделать объеденить все устройсва которые есть дома модулями esp8266 для обмена и сбора информации. Обмен планируется сделать через центральное устройство(малинка или роутер TP-Link MR3020 OpenWRT c php сервером и бд) Центральное устройство будет по времени слать запросы на различные датчики, а те ему отвечать или когда происходит какое-то событие на датчике(устройстве) то оно шлет центральному устройству сообщение. Как можно организовать такой метод обмена данными, если не прибегать к программированию ESP а ограничеться стандартной прошивкой и МК? Первое что приходит в голову это на каждом датчике ESP поднять TCP сервер. Центральное устройство как клиент подключается к датчику шлет запрос, датчик отвечает и центральное устройство отключается от датчика и так ко всем датчика в доме. А центральное устройство когда не опрашивает датчики находится в режиме TCP сервера, что бы если на датчике сработает какое-то событие, что бы этот датчик перешел в режим TCP клиента, подключился к центральному устройству и отправил данные и снова перешел в TCP сервер.. Что-то типо такого)) Направте на путь истиный) Еще как вариант рассматриваю написать отдельную прошивку для ESP через Arduino IDE для этих целей. Но ESP планируется использовать совместно с МК ATmega8 т.к. пока что его хватает для моих устройств))
День добрый,
Приобрел esp8266-01 и сейчас осваиваю с Ардоино Уно.
Так же имеются модули :RTC 3231 and Oled LCD Display 0.96''.
Пытался собрать такую схему :
Время считывается и выводиться на LCD и так же через esp8266 , который должен подключаться к домашнему раутеру, наблюдается по web.
Сложности с которыми я столкнулся (не решенные) :
На esp8266 дефолтаная прошивка... Не получается сконфигурировать esp8266 на подключение к дом. роутера и чтобы он при этом как сервер работал.
Так же пытался (без успеха) , чтобы esp8266 управлялся из прописаного кода (конфигурации, setup, init) , ну и так же , чтобы я мог с Serial Monitor давать ему команды и видеть их выполнения в этом же Serial Monitor. Реально ли такое или я загнул ?
Когда брал простой пример для esp8266 (рабочий) , и добавлял к нему LCD с RTC 3231 (тоже рабочий код (считывает время и пишет на LCD ) ) , то вместе , часть кода для esp8266 работает не корректно .
Прошу помощи. Начал играться с модулями, да нечаянно установил скорость 11520 вместо 115200. Сейчас и прошить не могу через стандартную прогу, т.к. не коннектится. Дабы соединиться с модулем в терминале задаю кастомную скорость 11520 однако на команды отвечает абракадаброй, при сбросе модуля тоже абракадабра, в конце слова READY не видно, прободвал перебирать скорости. Читал где-то об автоопределении скорости, но не смог ничего сделать. У кого есмть какие идеи?
Когда Вы соединяете GPIO0 с GND, модуль переходит в режим прошивки, в нем выставленные ранее параметры порта не актуальны. Режим прошивки поддерживает автоопределение скорости и прошивка может быть осуществлена на скорости от 9600 и выше.
так вот хочу я его попытаться прошить (дабы восстановить старый у которого испорчена скорость), пробую законнектиться к модулю прогой XTCOM (GPIO0 на GND, CH_PD на 3,3 В сначала все соединил, потом включил, модуль питается от преобразователя УСБ-УАРТ). В проге XTCOM открываю порт OPEN, пишет Operation Succeeded! далее жму Connect и начинает бежать счетчик до 200 в конце пишет Fail to connect with target! Короче не соединяется. Здесь пробовал различные скорости, все также... Прошу вашего мнения..
Кто-нибудь отправлял длинные сообщения? В спецификации сказано что можно отправлять пакеты длинной 2048 байт. Т.е. теоритически можно отправить сообщение состоящее из 2048 символов. Однако при отправке сообщения больше 300 символов - отправка не происходит. Возможно в спецификации ошибка: не байт а бит? Или это только у меня такая ситуация.
Кто-нибудь отправлял длинные сообщения? В спецификации сказано что можно отправлять пакеты длинной 2048 байт. Т.е. теоритически можно отправить сообщение состоящее из 2048 символов. Однако при отправке сообщения больше 300 символов - отправка не происходит. Возможно в спецификации ошибка: не байт а бит? Или это только у меня такая ситуация.
Байт, конечно же.
Мои игры с отправкой-приемом пакетов по 100-200 байт были неудачны. Сейчас ограничиваю себя 32-мя байтами, так надежнее проходит. Кроме того, стараюсь слать не чаще раза в 3-5 секунд.
Подскажите пожалуйста, если модуль настроен как точка доступа, есть ли ограничения на количество клиентов подключенных к данному модулю. Необходимо до 15 соединений и обмениваться информацией по tcp. По tcp одновременно будет идти обмен информацией только с одним клиентом.
Про TCP я вкурсе что только до 4 соединений, но мне одновременно только 1 соединение необходимо. А вот то что столько мало клиентов это печально(( Выход только использовать отдельный роутер, да?
Модуль esp8266 должен быть предварительно прошит прошивкой 1.0.0 SDK 0.22 и сконфигурирован (скорость порта, точка доступа, автоматическое подключение) через любую терминальную программу и переходник USB-UART на макетке с помощью АТ-команд. Читаем описание АТ-команд на esp8266.ru
/*
Настенные часы на семисегментных индикаторах GNS23011, врезаны светодиоды для двух центральных точек
Датчик освещенности "табла" (фоторезистор)
Модуль управления - Arduino Pro Mini 3V 8MHz
Часы - DS3231 в виде готового модуля с резервным аккумулятором
Датчик BMP180 с обвязкой - атмосферное давление, комнатная температура
Датчик HC-SR501 PIR MOTION DETECTOR (включает настенный светильник 220В через модуль коммутации на симисторе)
Модуль NRF24l01+ для получения данных от погодного датчика за окном и от сервера
Модуль ESP8266 для получения времени с NTP через WiFi (прошивка 1.0.0 SDK 0.22)
ESP8266 предварительно настроен на мою точку доступа и автоконнект, скорость 9600, mode 1 (STA)
Питание: блок 220-12 для светодиодных лент и готовый DC-DC регулируемый (уст. 9В) на LM2596,
далее - локальные стабилизаторы 5В и 3В где надо
Раскладка разъемов - в DOC файле. Согласование уровней 3.3-5В на МОСФЕТах.
Схему рисовать лень...
*/
//#define ISDEBUG // Мы в отладке
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
#include <BMP180.h>
#include <Metro.h>
#include <SoftwareSerial.h>
#define latchPin 9 // LE драйвера MBI5026
#define clockPin 8 // CLK драйвера MBI5026
#define dataPin 7 // SDI драйвера MBI5026
#define OEPin 6 // OE инверсный для ШИМ регулировки яркости
#define dotsPin 5 // Вывод центральных точек индикатора
#define PHOTORES A1 // Вход фоторезистора
#define HourButton A7 // увеличение показаний часов
#define MinuteButton A6 // увеличение показаний минут
#define PIR 2 // инфракрасный датчик присутствия
#define RELAY 4 // реле
#define SID 800 // идентификатор датчика - этот узел 800
char VERSION[]={1,0,3}; // Так, для красоты можно при старте часов вывести
// For NTP & ESP8266
SoftwareSerial mySerial(16, 17); // A2 - RX, A3 - TX
unsigned long started=0;
uint32_t out=0;
time_t NTPtime=0;
//tmElements_t tm;
int c0, lenght=0;
const unsigned long seventyYears = 2208988800UL;
const unsigned long LocalTimeZone = 10800UL; // GMT+3
const int NTP_PACKET_SIZE= 48; // NTP time stamp is in the first 48 bytes of the message
byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
// Сервер WWW.BELGIM.BY 178.124.164.107
//ПЕРЕМЕННЫЕ ДЛЯ ВЫВОДА НА ИНДИКАТОР
byte digit1, digit2, digit3, digit4; // разряды индикатора слева направо
volatile char d1, d2;
volatile int luminance=0; //освещенность, upperTreshold=1023, bottomTreshold=0, lumstep=0;//
volatile byte OE=0, dots=0;
volatile boolean dotsEnable=true;
// структура для получения значений от сервера
typedef struct{
int SensorID; // идентификатор датчика
float ParamValue1; // значение параметра 1
float ParamValue2; // значение параметра 2
float ParamValue3; // значение параметра 3
float ParamValue4; // значение параметра 4
time_t ParamValue5; // значение параметра 5
time_t ParamValue6; // значение параметра 6
char Comment[6]; // комментарий
}
MessageMeteo2;
MessageMeteo2 ReceivedMeteo = { SID, 9999, 9999, 9999, 9999, 9999, 9999, "empty" }; // Для приема
MessageMeteo2 Meteo4 = { SID, 4444, 4444, 4444, 4444, 4444, 4444, "CLOCK" }; // Для передачи
time_t meteo4time; // время получения метеоданных с сервера 900 или внешнего датчика 600
tmElements_t tmMeteo4;
time_t lastNTPtime = 0; // время получения времени от NTP
/////////////////////////////////////////////////////////////////////////////
// Периодичность действий
#ifdef ISDEBUG
Metro NTPTimeSync = Metro(900000); //Если отладка - период синхронизации RTC по NTP 15 минут
#endif
#ifndef ISDEBUG
Metro NTPTimeSync = Metro(14400000); //Период синхронизации RTC по NTP (4 часа)
#endif
Metro ReadRTCtime_period = Metro(600000); //Период чтения значений из RTC (10 минут)
Metro Trans_period = Metro(180000); //Период отправки данных (3 минуты)
Metro PIR_period = Metro(500); //Период опроса PIR (0.5 секунды)
unsigned long PreviousClockTime, i;
//флаг принятых данных для прерывания
volatile boolean waitRF24 = false;
// флаг принятых данных от сервера (датчиков)
volatile boolean Meteo4enable = false;
// Set up nRF24L01 radio on SPI bus plus pins 14 & 10 (CE, CSN)
RF24 radio(14,10);
// Radio pipe addresses for the 4 nodes to communicate.
const uint64_t pipes[5] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F0C7LL, 0xF0F0F0F0A5LL, 0xF0F0F0F0B4LL };
// адреса: 0 - сервер, 1 - внутренний модуль, 2 - уличный модуль, 3 - машина, 4 - этот модуль
float tempDHT, humid, tempTMP, timeFromServer;
float pressureBMP, tempBMP;
int sign, output, hours, mins;
tmElements_t tm;
BMP180 barometer;
void setup() {
#ifdef ISDEBUG
Serial.begin(57600);
Serial.print("Firmware version ");
Serial.print((char)(VERSION[0]+'0'));
Serial.print((char)(VERSION[1]+'0'));
Serial.print((char)(VERSION[2]+'0'));
Serial.println();
#endif
mySerial.begin(9600);
//переключение выводов для индикатора в режим работы "вывод", т.к. к ним идет обращение в главном цикле
pinMode(latchPin, OUTPUT);
digitalWrite(latchPin, LOW);
pinMode(clockPin, OUTPUT);
digitalWrite(clockPin, LOW);
pinMode(dataPin, OUTPUT);
digitalWrite(dataPin, LOW);
pinMode(OEPin, OUTPUT);
digitalWrite(OEPin, HIGH);
pinMode(dotsPin, OUTPUT);
pinMode(PIR, INPUT_PULLUP);
// pinMode(PIR, INPUT);
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, LOW);
// lumstep = (upperTreshold-bottomTreshold)/16;
// Зажигаем все табло с максимальной яркостью
OE=0; dots=255;
digit1 = B11111111;
digit2 = B11111111;
digit3 = B11111111;
digit4 = B11111111;
ShowInfo();
delay(2000);
// Выводим версию ПО часов
digit1 = SegmentValue (22); // F
digit2 = Digit1toDigit2 (SegmentValue (VERSION[0]));
digit3 = SegmentValue (VERSION[1]);
digit4 = Digit1toDigit2 (SegmentValue (VERSION[2]));
dots=0;
ShowInfo();
// Инициализируем радиоканал NRF24
#ifdef ISDEBUG
printf_begin();
printf("\n\rRF24_setup/\n\r"); // Setup and configure rf radio
#endif
radio.begin();
radio.setRetries(15,15); // optionally, increase the delay between retries & # of retries
radio.setChannel(109); // номер канала, на котором работаем (подобрать свой)
radio.setDataRate(RF24_250KBPS);
radio.setPayloadSize(sizeof(MessageMeteo2)); // optionally, reduce the payload size. seems to improve reliability
// Open pipes to other nodes for communication
radio.openWritingPipe(pipes[4]);
radio.openReadingPipe(1,pipes[0]);
radio.openReadingPipe(2,pipes[1]);
radio.openReadingPipe(3,pipes[2]);
radio.openReadingPipe(4,pipes[3]);
// Start listening
radio.startListening();
#ifdef ISDEBUG
radio.printDetails(); // Dump the configuration of the rf unit for debugging
#endif
// Attach interrupt handler to interrupt #1 (using pin 3)
attachInterrupt(1, check_radio, FALLING);
Wire.begin(); //i2c
barometer = BMP180();
if(barometer.EnsureConnected())
{
#ifdef ISDEBUG
Serial.println("Connected to BMP180."); // Output we are connected to the computer.
#endif
// When we have connected, we reset the device to ensure a clean start.
barometer.SoftReset();
// Now we initialize the sensor and pull the calibration data.
barometer.Initialize();
}
#ifdef ISDEBUG
else
{
Serial.println("Could not connect to BMP180.");
}
#endif
delay(4000); // Подождем еще четыре секунды, чтобы увидеть версию прошивки и поднять коннект с ТД
setTime(RTC.get()) ; //установим системное время из часов ds3231
#ifdef ISDEBUG
Serial.println("RTC reading OK");
PrintTime (now());
#endif
ShowRTC(); // Отобразим время
//Запрашиваем время с NTP сервера
#ifdef ISDEBUG
Serial.println("Request for NTP ...");
#endif
GetNTP_esp8266(); //
//Если время получили успешно, то записываем данные в RTC
if (NTPtime!=0 && NTPtime!=0xFFFFFFFF)
{
setTime(NTPtime);
RTC.set(now());
lastNTPtime=NTPtime;
// Помигаем цифрами два раза - типа ОК
ShowRTC();
analogWrite(OEPin, 255);
delay(500);
ShowRTC();
delay(500);
ShowRTC();
analogWrite(OEPin, 255);
delay(500);
#ifdef ISDEBUG
Serial.println("NTP updated OK!");
PrintTime (now());
#endif
}
ShowRTC();
} //end of setup
void loop() {
if (ReadRTCtime_period.check() == 1)
{
setTime(RTC.get()) ; //установим системное время из часов ds3231
#ifdef ISDEBUG
Serial.println("RTC reading OK");
PrintTime (now());
#endif
}
#ifdef ISDEBUG
// PrintTime (now());
#endif
if (NTPTimeSync.check() == 1) //Синхронизация по времени
{
dotsEnable=true;
ShowRTC(); // Для начала - отобразим время
//Запрашиваем время с NTP сервера
#ifdef ISDEBUG
Serial.println("Request for NTP ...");
#endif
GetNTP_esp8266(); // секунд около 40
//Если время получили успешно, то записываем данные в RTC
if (NTPtime!=0 && NTPtime!=0xFFFFFFFF)
{
setTime(NTPtime);
RTC.set(now());
lastNTPtime=NTPtime;
// Помигаем цифрами два раза - типа ОК
ShowRTC();
analogWrite(OEPin, 255);
delay(500);
ShowRTC();
delay(500);
ShowRTC();
analogWrite(OEPin, 255);
delay(500);
#ifdef ISDEBUG
Serial.println("NTP updated OK!");
PrintTime (now());
#endif
}
ShowRTC();
}
dotsEnable=true;
ShowRTC();
PreviousClockTime = millis();
i=1;
while (abs(millis()-PreviousClockTime) < 20000) // 20 секунд крутим цикл
{
if ( (abs(millis()-PreviousClockTime)) >= (i*1000))
{dotsEnable=!dotsEnable;
ShowRTC();
i++;
};
checkClockButtons();//обработка нажатий кнопок установки часов
if (PIR_period.check() == 1) {checkPIR(); //обработка срабатывания датчика движения
SetBrightness();
ShowInfo();
}
};
//delay(10000); // держим 10 секунд
if (waitRF24) //флаг полученных данных взведен
{
waitRF24 = false; //сбросим флаг
if ( radio.available() )
{
// Dump the payloads until we've gotten everything
bool done = false;
while (!done)
{
done = radio.read( &ReceivedMeteo, sizeof(ReceivedMeteo) ); // Fetch the payload, and see if this was the last one.
// Spew it
#ifdef ISDEBUG
Serial.print(">>>>>>>>>>> Got data from MODULE ");
Serial.print(ReceivedMeteo.SensorID);
Serial.println(); // Start a new line.
#endif
if(ReceivedMeteo.SensorID==900) {
meteo4time = now();
Meteo4enable=true;
// если время, переданное сервером, более позднее, чем собственное, обновляем RTC
if (ReceivedMeteo.ParamValue6 > lastNTPtime)
{
setTime(ReceivedMeteo.ParamValue5);
RTC.set(now());
lastNTPtime=ReceivedMeteo.ParamValue6;
#ifdef ISDEBUG
Serial.print("Set time from module 900 ");
Serial.println(); // Start a new line.
#endif
ShowRTC();
};
// проверка на NAN
if (ReceivedMeteo.ParamValue1==ReceivedMeteo.ParamValue1)
{tempDHT=constrain(ReceivedMeteo.ParamValue1, -50.0, 80.0);
humid=constrain(ReceivedMeteo.ParamValue2, 0.0, 99.9);
}
// else Meteo4enable=false;
};
if(ReceivedMeteo.SensorID==600) {
meteo4time = now();
Meteo4enable=true;
// проверка на NAN
if (ReceivedMeteo.ParamValue1==ReceivedMeteo.ParamValue1)
{tempDHT=constrain(ReceivedMeteo.ParamValue1, -50.0, 80.0);
humid=constrain(ReceivedMeteo.ParamValue2, 0.0, 99.9);
}
// else Meteo4enable=false;
}
delay(20); // Delay just a little bit to let the other unit make the transition to receiver
}
} //Конец обновления данных от сервера
} // Обработали прерывание от NRF24L01
dotsEnable=false; //выключим отображение точек
if (Meteo4enable)
{
#ifdef ISDEBUG
Serial.print("TempDHT ");
Serial.print(tempDHT,1);
Serial.print(" C, Humidity ");
Serial.print(humid,1);
Serial.println(" %"); // Start a new line.
#endif
// выводим уличную температуру
if (tempDHT<0) {sign=1; tempDHT=-tempDHT;} else {sign=0;};
output = (int)(tempDHT+0.5);
if ((sign==1)&&(output>=10)) {d1=10;} else {d1=11;}; // знак минус если температура отриц. и двузначная
digit1 = SegmentValue (d1);
if ((now()-meteo4time)>1800)
{digit1 = digit1|B00000100;}; //Если возраст инфы более 30 минут - в первом разряде пририсовываем точку
IntToDigits (output);
if (output < 10) { d1=11; }; // убираем ноль в первом разряде
if ((sign==1)&&(output<10)) {d1=10;} ; // знак минус если температура отриц
digit2 = Digit1toDigit2 (SegmentValue (d1)); // десятки градусов
digit3 = SegmentValue (d2); // единицы градусов
digit4 = Digit1toDigit2 (SegmentValue (30)); // знак градуса
SetBrightness();
ShowInfo();
PreviousClockTime = millis();
while (abs(millis()-PreviousClockTime) < 4000) // 4 секунды крутим цикл
{
checkClockButtons();//обработка нажатий кнопок установки часов
if (PIR_period.check() == 1) {checkPIR(); //обработка срабатывания датчика движения
SetBrightness();
ShowInfo();
}
}
// выводим уличную влажность
output = (int)(humid+0.5);
digit1 = SegmentValue (23); // знак H
if ((now()-meteo4time)>1800)
{digit1 = digit1|B00000100;}; //Если возраст инфы более 30 минут - в первом разряде пририсовываем точку
d2 = byte(output/100);
if (d2 == 0) { d2=11; }; // убираем ноль
digit2 = Digit1toDigit2 (SegmentValue (d2)); // сотни процентов
IntToDigits (output%100);
if (output < 10) { d1=11; }; // убираем ноль
digit3 = SegmentValue (d1); // десятки процентов
digit4 = Digit1toDigit2 (SegmentValue (d2)); // единицы процентов
SetBrightness();
ShowInfo();
PreviousClockTime = millis();
while (abs(millis()-PreviousClockTime) < 4000) // 4 секунды крутим цикл
{
checkClockButtons();//обработка нажатий кнопок установки часов
if (PIR_period.check() == 1) {checkPIR(); //обработка срабатывания датчика движения
SetBrightness();
ShowInfo();
}
}
if ((now()-meteo4time)>14400)
{Meteo4enable=false;}; //Если возраст инфы более 4 часов - запрещаем отображение meteo4
};
// получаем давление и внутреннюю температуру
if(barometer.IsConnected)
{
pressureBMP = barometer.GetPressure(); // Retrive the current pressure in Pascals.
tempBMP = barometer.GetTemperature(); // Retrive the current temperature in degrees celcius.
//Формируем пакет
// Meteo4.SensorID = SID;
Meteo4.ParamValue1 = (pressureBMP+0.5)/133.3; //давление в мм рт ст
Meteo4.ParamValue2 = tempBMP; // температура
Meteo4.ParamValue3 = (float)(1023 - analogRead(PHOTORES)); // показания датчика освещенности
Meteo4.ParamValue4 = (float)(digitalRead(PIR)); // датчик присутствия
Meteo4.ParamValue5 = RTC.get(); // время замера
Meteo4.ParamValue6 = lastNTPtime; //до кучи...
// Meteo4.Comment = (char*)"CLOCK";
#ifdef ISDEBUG
Serial.print("PressureBMP ");
Serial.print( ((pressureBMP/133.3)+0.5),1);
Serial.print(" mmHg, TempBMP ");
Serial.print(tempBMP,1);
Serial.println(" C"); // Start a new line
#endif
// выводим давление
output = (int)((pressureBMP/133.3)+0.5); //перевод в мм рт ст и округление до целого
digit1 = SegmentValue (19); // знак P
d2 = byte(output/100);
if (d2 == 0) { d2=11; }; // убираем ноль
digit2 = Digit1toDigit2 (SegmentValue (d2)); // сотни процентов
IntToDigits (output%100);
if (output < 10) { d1=11; }; // убираем ноль
digit3 = SegmentValue (d1); // десятки процентов
digit4 = Digit1toDigit2 (SegmentValue (d2)); // единицы процентов
SetBrightness();
ShowInfo();
PreviousClockTime = millis();
while (abs(millis()-PreviousClockTime) < 4000) // 4 секунды крутим цикл
{
checkClockButtons();//обработка нажатий кнопок установки часов
if (PIR_period.check() == 1) {checkPIR(); //обработка срабатывания датчика движения
SetBrightness();
ShowInfo();
}
}
// выводим комнатную температуру
if (tempBMP<0) {sign=1; tempBMP=-tempBMP;} else {sign=0;};
output = (int)(tempBMP+0.5);
if ((sign==1)&&(output>=10)) {d1=10;} else {d1=11;}; // знак минус если температура отриц. и двузначная
digit1 = SegmentValue (d1);
IntToDigits (output);
if (output < 10) { d1=11; }; // убираем ноль в первом разряде
if ((sign==1)&&(output<10)) {d1=10;} ; // знак минус если температура отриц
digit2 = Digit1toDigit2 (SegmentValue (d1)); // десятки градусов
digit3 = SegmentValue (d2); // единицы градусов
digit4 = Digit1toDigit2 (SegmentValue (30)); // знак градуса
SetBrightness();
ShowInfo();
PreviousClockTime = millis();
while (abs(millis()-PreviousClockTime) < 4000) // 4 секунды крутим цикл
{
checkClockButtons();//обработка нажатий кнопок установки часов
if (PIR_period.check() == 1) {checkPIR(); //обработка срабатывания датчика движения
SetBrightness();
ShowInfo();
}
}
//Передадим данные на сервер
if (Trans_period.check() == 1)
{
// Delay just a little bit to let the other unit
// make the transition to receiver
delay(20);
radio.stopListening(); // отключаем режим приёма
delay(20);
radio.write( &Meteo4, sizeof(Meteo4) ); //отправляем мессагу
delay(20);
radio.startListening();
#ifdef ISDEBUG
Serial.println(">>>>>>>>>>> Data transmitted >>>>>>");
#endif
};// конец передачи
} //if barometer connected
} //loop
// ФУНКЦИИ ДЛЯ ИНДИКАТОРА
float norm(int value, int bottom, int upper, float power, int minimum) {
float ret = 0;
value = constrain(value, bottom, upper);
ret = (float(value-bottom) / (float (upper-bottom)));
ret = (255.0 - float(minimum)) * pow(ret, power) + float(minimum);
return ret;
}
void SetBrightness()
{
// меряем освещенность и устанавливаем яркость
float lumnorm;
OE=0; dots=255;
luminance = 1023 - analogRead(PHOTORES); // яркость получается наоборот
lumnorm = norm (luminance, 0, 400, 1.0, 17);
if (dotsEnable) {dots = int(lumnorm);} else {dots = 0;};
lumnorm = norm (luminance, 0, 1000, 1.5, 5);
OE = 255 - int(lumnorm);
#ifdef ISDEBUG
Serial.print("Luminance ");
Serial.print( luminance );
Serial.print(" dots ");
Serial.print( dots );
Serial.print(" OE ");
Serial.println( OE );
#endif
}
void ShowInfo ()
{
//формируем ноль на latchPin и удерживаем его до конца передачи
//возвращаем высокий уровень на latchPin, тем самым сообщая микросхеме о том, что
//больше не требуется воспринимать информацию
analogWrite(OEPin, OE);
analogWrite(dotsPin, dots);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, digit4);
shiftOut(dataPin, clockPin, LSBFIRST, digit3);
shiftOut(dataPin, clockPin, LSBFIRST, digit2);
shiftOut(dataPin, clockPin, LSBFIRST, digit1);
digitalWrite(latchPin, HIGH);
}
byte Digit1toDigit2 (byte d) // преобразование для второго разряда из пары
{
byte u = (d<<3)+(d>>5);
return u;
}
byte SegmentValue(char k)
{
byte u;
switch (k)
{
case 0:
u=B11101011;
break;
case 1:
u=B10000001;
break;
case 2:
u=B01110011;
break;
case 3:
u=B11010011;
break;
case 4:
u=B10011001;
break;
case 5:
u=B11011010;
break;
case 6:
u=B11111010;
break;
case 7:
u=B10000011;
break;
case 8:
u=B11111011;
break;
case 9:
u=B11011011;
break;
case 10: // '-':
u=B00010000;
break;
case 11: //' ':
u=B00000000;
break;
/* case 12: //'E':
u=B01111010;
break;
case 13: //'U':
u=B11101001;
break;
case 14: //'u':
u=B11100000;
break;
case 15: //'I левое':
u=B00101000;
break;
case 16: //'i правое':
u=B10000000;
break;
case 17://'i левое':
u=B00100000;
break;
case 18: //'o':
u=B11110000;
break; */
case 19: //'P':
u=B00111011;
break;
/* case 20: //'A':
u=B10111011;
break;
case 21: //'S':
u=B11011010;
break; */
case 22: //'F':
u=B00111010;
break;
case 23: //'H':
u=B10111001;
break;
/* case 24: //'J':
u=B11100001;
break;
case 25: //'L':
u=B01101000;
break;
case 26: //'C':
u=B01101010;
break;
case 27: //'B':
u=B11111011;
break;
case 28: //'b':
u=B11111000;
break;
case 29: //'d':
u=B11110001;
break; */
case 30: //'°':
u=B00011011;
break;
default:
u=B00000000;
}
return u;
}
void IntToDigits (int a)
{
d1 = (char)(a/10);
d2 = (char)(a%10);
}
// ФУНКЦИИ ДЛЯ ЧАСОВ
void ShowRTC()
{
#ifdef ISDEBUG
Serial.println("Show RTC ...");
#endif
RTC.read(tm);
IntToDigits (tm.Hour);
if (tm.Hour < 10) { d1=11; }
digit1 = SegmentValue (d1);
digit2 = Digit1toDigit2 (SegmentValue (d2));
IntToDigits (tm.Minute);
digit3 = SegmentValue (d1);
digit4 = Digit1toDigit2 (SegmentValue (d2));
SetBrightness();
ShowInfo();
#ifdef ISDEBUG
// PrintTime(RTC.get());
Serial.print("Hour = ");
Serial.print(tm.Hour);
Serial.print(" Minute = ");
Serial.println(tm.Minute);
#endif
}
void checkClockButtons()//обработка нажатий кнопок установки часов
{
if (analogRead(HourButton)<128)
{
delay(300);
if (analogRead(HourButton)<128)
{RTC.read(tm);
tm.Hour++;
if (tm.Hour>=24) {tm.Hour=0;};
RTC.write(tm);
setTime(RTC.get()) ; //установим системное время из часов ds1307
ShowRTC();
};
};
if (analogRead(MinuteButton)<128)
{
delay(300);
if (analogRead(MinuteButton)<128)
{RTC.read(tm);
tm.Minute++;
if (tm.Minute>=60) {tm.Minute=0;};
RTC.write(tm);
setTime(RTC.get()) ; //установим системное время из часов ds1307
ShowRTC();
};
};
}
void checkPIR() //обработка срабатывания датчика движения
{
int hr=hour();
if (digitalRead(PIR)==HIGH)
{ if ( (hr>=6)&&(hr<22) ) { digitalWrite(RELAY, HIGH); }
else { digitalWrite(RELAY, LOW); };
#ifdef ISDEBUG
Serial.print("PIR is HIGH ");
Serial.print(" Hour = ");
Serial.println(hr);
#endif
};
if (digitalRead(PIR)==LOW)
{ digitalWrite(RELAY, LOW);
#ifdef ISDEBUG
Serial.println("PIR is LOW ");
#endif
};
}
// Обработчик прерывания
void check_radio()
{
waitRF24 = true;
}
time_t GetNTP_esp8266()
{
NTPtime=0;
/* mySerial.println("AT+RST");
delay(3000);
mySerial.println("AT+CWMODE_CUR=1");
delay(2000);
#ifdef ISDEBUG
Serial.println("Connect to my AP");
#endif
mySerial.println("AT+CWJAP_CUR=\"MYSSID\",\"MYPASSWORD\"");
delay(8000);
*/
setNTPpacketBuffer();
#ifdef ISDEBUG
Serial.println("Connect to NTP");
#endif
mySerial.println("AT+CIPSTART=\"UDP\",\"178.124.164.107\",123,34000");
delay(5000);
#ifdef ISDEBUG
Serial.println("Send lenght 48 bytes");
#endif
mySerial.println("AT+CIPSEND=48");
delay(4000);
while ( mySerial.available()) mySerial.read();
// delay(100);
#ifdef ISDEBUG
Serial.println("Send NTP packet ");
#endif
for (int i=0; i<NTP_PACKET_SIZE; i++) {mySerial.write(packetBuffer[i]); }
#ifdef ISDEBUG
Serial.println("NTP packet sended ");
#endif
delay(10000);
#ifdef ISDEBUG
Serial.println("Receive Message");
#endif
if (mySerial.available())
{
started = millis();
do {c0 = mySerial.read();} while ((c0 != ':') && (mySerial.available()));
for (int i=0; i<NTP_PACKET_SIZE; i++) {packetBuffer[i] = mySerial.read();
// Serial.print(packetBuffer[i],HEX); Serial.print(",");
}
out = (uint32_t(packetBuffer[40])<<24) + (uint32_t(packetBuffer[41])<<16) + (uint32_t(packetBuffer[42])<<8) + uint32_t(packetBuffer[43]) ;
NTPtime = out - seventyYears + LocalTimeZone + 12;
}
else {
#ifdef ISDEBUG
Serial.println("No data received!");
#endif
mySerial.println("AT+CIPCLOSE");
return 0;
}
#ifdef ISDEBUG
Serial.println("Close connection");
#endif
mySerial.println("AT+CIPCLOSE");
// delay(1000);
// if (out==0xFFFFFFFF) {return0} else
return NTPtime;
}
void setNTPpacketBuffer()
{
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request
// (see URL above for details on the packets)
packetBuffer[0] = 0b11100011; // LI, Version, Mode
packetBuffer[1] = 0; // Stratum, or type of clock
packetBuffer[2] = 6; // Polling Interval
packetBuffer[3] = 0xEC; // Peer Clock Precision
// 8 bytes of zero for Root Delay & Root Dispersion
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;
}
#ifdef ISDEBUG
void PrintTime (time_t ttt)
{
tmElements_t tttm;
Serial.print("UNIXTIME ->>>> ");
Serial.print(ttt,HEX);
Serial.print(" ->>>> ");
Serial.println(ttt,DEC);
breakTime(ttt, tttm);
Serial.print("Date time is: ");
Serial.print(tttm.Day);
Serial.print(".");
Serial.print(tttm.Month);
Serial.print(".");
Serial.print(tttm.Year+1970);
Serial.print(" - ");
Serial.print(tttm.Hour);
Serial.print(":");
if ( (tttm.Minute) < 10 ) {
// In the first 10 minutes of each hour, we'll want a leading '0'
Serial.print('0');
}
Serial.print(tttm.Minute);
Serial.print(":");
if ( (tttm.Second) < 10 ) {
Serial.print('0');
}
Serial.print(tttm.Second);
Serial.println(); // Start a new line.
}
#endif
У меня похожие цифры получались, когда NTP сервер в четырех байтах возвращал FFFFFFFF.
Я вылечил выбором сервера belgim.by.
Попробуйте NTP сервера российского ВНИИФТРИ (эталон времени РФ), или задержки для получения ответа увеличить. Как мне показалось, esp8266 любит неторопливую работу.
Еще установите увеличенный буфер для SoftwareSerial. Рекомендуют 256.
Мне попробовать не на чем - часы уже на стене висят и четко пашут.
А вообще, я начинал с макетки и терминальной программки CoolTerm. Читаем описание АТ-команд, задаем руками, смотрим в терминале ответ, осознаем. Возможно, загоните модуль в бессознательное состояние - лечим перепрошивкой и начинаем заново: AT+RST и далее ...
да с ESP с большего все понятно. до отправки данных на NTP все работает (выбор режима модуля, сброс модуля, коннект к WiFi, коннект к NTP, после обмена с NTP закрытие соединения и отключение от WiFi). а вот проконтролировать что уходит и что приходит от NTP мозгов не хватает. из того ответа NTP что вижу в скетче первые 4 числа есть (третье меняется), остальные FF.
Т.е. во всех символах ответа NTP должно быть что то отличное от FF? а что надо ему посылать? есть ли какая то одна строка? что бы через ESPlorer к примеру ручками послать и посмотреть ответ
В четырех значащих байтах - 40,41,42,43. 43 младший. Количество секунд с 1.01.1900 г. Можно на калькуляторе посчитать, чтобы понять что должно прийти.
А чтобы послать ему нужные 48 байт - я их вычислял из функции setNTPpacketBuffer(), набирал в HEX-редакторе, копировал и отправлял на приглашение модуля.
Тогда как прошить ESP, без Ардуино и прошивальщика?! Как ваще понять что ESP живой? Как в ESP забить данные моей Wi-Fi сети?
Ну я бы рекомендовал иметь USB-TTL адаптер. Но можно и Вашу ардуинку для этого использовать. Адаптер у неё на борту. Пропишите в ардуинку любой скетч не использующий сериал-порт и подключив к RX ардуины RX esp8266, а к TX соответственно TX получите USB-TTL адаптер из ардуины. Ну и 3.3 вольта для esp8266 (обычно) надо. И учтите, что она достаточно прожорливая во время работы радиомодуля.
Эх,коллеги,выручайте!
Настраивал UART через АТ-команды, случайно выставил "рукопожатие" через RTS/CTS. Теперь модуль ни на что не отзывается, и хард резет АТ-командой сделать не могу( Как сбросить эти настройки?
Залей дефолтную прошивку.
Подскажите пожалуйста, можно ли этим модулям присвоить статический ip в ручную?
Смотря где, в какой прошивке или IDE.
В SDK есть такая функция и у меня это реализовано.
В прошивка которая идёт по умолчанию в модулях. Работать буду с atmega8 в атмел студио.
Возможность присваивать адрес начинается с версии 0.95.
Добрый день!
Подскажите плиз какой модуль лучше взять на алиекспрессе!
Хотел поработать с модулем, но вижу то много модификаций.
Если нет особых требований к количеству разведенных пинов, посоветую ESP-01.
Если для исследований - ESP-201.
Появились также новые модификации с увеличенным размером памяти, ESD-12 (ESPD-12), WROOMы всякие, но я с ними еще не разбирался.
Здесь http://esp8266.ru/modules-esp8266/ подробнее.
Брал такую. Классическую. Похоже на 01. Стандартная схема подключения, ожидаемая реакция на стандартные команды. Работает. Питается от 3,3 леонарды, сигналы напрямую к РХ-ТХ.
http://www.aliexpress.com/item/1Pcs-ESP8266-Serial-WIFI-Wireless-Transce...
Спасибо!
Всем добрый день и всех с наступающими праздниками.
Возник вот такой вопрос(задача).
Есть устройство на arduino и esp8266 07. На нем поднят TCP сервер. Прошивка старая 0018000902.
Хочеться сделать переодичную проверку устройства на наличие подключения к сети (как пример перезагрузился роутер). И если его нет делать переподключение устройства к сети.
Как бы это лучше реализовать???
Если переодично дергать AT+CIPSTATUS, то оно не меняеться( роутер включен/ роутер выключен) . делать отправку сообщения и ловить ответ не хочется.
Может у кого есть мысли на этот счет???????
1. AT+CIPSTATUS точно не поможет.
2. "делать отправку сообщения и ловить ответ не хочется" , а ведь придется ))) . Лучше пинга в данной ситуации придумать ничего не удастся.
Подскажите пожалуйста, можно ли используя этот модуль:
1)Средствами wifi передать этому модулю к примеру число с компьютера.
2)Запрограммировать модуль так, чтобы после того, как он принял это число - он передал его Arduin'e.
3)Собственно запрограммировать Arduin'у, на прием данного числа от этого модуля?
Со стороны это так: нажал на кнопку на компьютере - загорелся светодиод.
(ПК > данный модуль > arduino зажигает нужный светодиод, в зависимости от нажатой кнопки)
Подскажите пожалуйста, можно ли используя этот модуль:
1)Средствами wifi передать этому модулю к примеру число с компьютера.
2)Запрограммировать модуль так, чтобы после того, как он принял это число - он передал его Arduin'e.
3)Собственно запрограммировать Arduin'у, на прием данного числа от этого модуля?
Со стороны это так: нажал на кнопку на компьютере - загорелся светодиод.
(ПК > данный модуль > arduino зажигает нужный светодиод, в зависимости от нажатой кнопки)
Можно, конечно. Более того это можно сделать даже без ардуино (только запрограммировать сам модуль). Но, судя по постановке вопроса, Вы в этом слабо разбираетесь и вряд ли Вас тут кто-то этому научит, имхо.
Если я правильно понимаю, то нужно установить коннект пк с модулем(одно из них сервер, другое - клиент), и далее AT+CIPSEND отправлять цифру. А в модуле эта цифра будет обрабатываться, и выводить сигнал на нужный OUTPUT?
День добрый форумчане! Есть задумка сделать объеденить все устройсва которые есть дома модулями esp8266 для обмена и сбора информации. Обмен планируется сделать через центральное устройство(малинка или роутер TP-Link MR3020 OpenWRT c php сервером и бд) Центральное устройство будет по времени слать запросы на различные датчики, а те ему отвечать или когда происходит какое-то событие на датчике(устройстве) то оно шлет центральному устройству сообщение. Как можно организовать такой метод обмена данными, если не прибегать к программированию ESP а ограничеться стандартной прошивкой и МК? Первое что приходит в голову это на каждом датчике ESP поднять TCP сервер. Центральное устройство как клиент подключается к датчику шлет запрос, датчик отвечает и центральное устройство отключается от датчика и так ко всем датчика в доме. А центральное устройство когда не опрашивает датчики находится в режиме TCP сервера, что бы если на датчике сработает какое-то событие, что бы этот датчик перешел в режим TCP клиента, подключился к центральному устройству и отправил данные и снова перешел в TCP сервер.. Что-то типо такого)) Направте на путь истиный) Еще как вариант рассматриваю написать отдельную прошивку для ESP через Arduino IDE для этих целей. Но ESP планируется использовать совместно с МК ATmega8 т.к. пока что его хватает для моих устройств))
Casper17, описанная Вами схема вполне хороша и жизнеспособна. Но, может быть Вам это http://homes-smart.ru/index.php/oborudovanie/bez-provodov-wi-fi/62-besprovodnoj-datchik-na-baze-esp8266-dlya-servisa-narodmon-ru подойдет ?
День добрый,
Приобрел esp8266-01 и сейчас осваиваю с Ардоино Уно.
Так же имеются модули :RTC 3231 and Oled LCD Display 0.96''.
Пытался собрать такую схему :
Время считывается и выводиться на LCD и так же через esp8266 , который должен подключаться к домашнему раутеру, наблюдается по web.
Сложности с которыми я столкнулся (не решенные) :
На esp8266 дефолтаная прошивка... Не получается сконфигурировать esp8266 на подключение к дом. роутера и чтобы он при этом как сервер работал.
Так же пытался (без успеха) , чтобы esp8266 управлялся из прописаного кода (конфигурации, setup, init) , ну и так же , чтобы я мог с Serial Monitor давать ему команды и видеть их выполнения в этом же Serial Monitor. Реально ли такое или я загнул ?
Когда брал простой пример для esp8266 (рабочий) , и добавлял к нему LCD с RTC 3231 (тоже рабочий код (считывает время и пишет на LCD ) ) , то вместе , часть кода для esp8266 работает не корректно .
Заранее благодарю за помощь.
Друзья!
Прошу помощи. Начал играться с модулями, да нечаянно установил скорость 11520 вместо 115200. Сейчас и прошить не могу через стандартную прогу, т.к. не коннектится. Дабы соединиться с модулем в терминале задаю кастомную скорость 11520 однако на команды отвечает абракадаброй, при сбросе модуля тоже абракадабра, в конце слова READY не видно, прободвал перебирать скорости. Читал где-то об автоопределении скорости, но не смог ничего сделать. У кого есмть какие идеи?
Попробуй прошить через прошивальщик от nodeMCU или esp8266_flasher.exe
Когда Вы соединяете GPIO0 с GND, модуль переходит в режим прошивки, в нем выставленные ранее параметры порта не актуальны. Режим прошивки поддерживает автоопределение скорости и прошивка может быть осуществлена на скорости от 9600 и выше.
Спасибо за советы.
Взял новый модуль. Работает норма по терминалу.
По прошивке выдает
AT version:0.21.0.0
SDK version:0.9.5
так вот хочу я его попытаться прошить (дабы восстановить старый у которого испорчена скорость), пробую законнектиться к модулю прогой XTCOM (GPIO0 на GND, CH_PD на 3,3 В сначала все соединил, потом включил, модуль питается от преобразователя УСБ-УАРТ). В проге XTCOM открываю порт OPEN, пишет Operation Succeeded! далее жму Connect и начинает бежать счетчик до 200 в конце пишет Fail to connect with target! Короче не соединяется. Здесь пробовал различные скорости, все также... Прошу вашего мнения..
Попробуй прошить через прошивальщик от nodeMCU или esp8266_flasher.exe
Присоединяюсь к совету.
Про XTCOM здесь http://esp8266.ru/esp8266-obnovlenie-proshivki-xtcom_util/ немного написано.
Leon, Araris спасибо!
Утилитой flasher шьется без проблем. И еще нарыл в нете сто нужно GPIO2 Подтягивать к +3,3. У меня подтянута.
Добрый день.
Кто-нибудь отправлял длинные сообщения? В спецификации сказано что можно отправлять пакеты длинной 2048 байт. Т.е. теоритически можно отправить сообщение состоящее из 2048 символов. Однако при отправке сообщения больше 300 символов - отправка не происходит. Возможно в спецификации ошибка: не байт а бит? Или это только у меня такая ситуация.
не на каждой ардуине оперативки хватит
Добрый день.
Кто-нибудь отправлял длинные сообщения? В спецификации сказано что можно отправлять пакеты длинной 2048 байт. Т.е. теоритически можно отправить сообщение состоящее из 2048 символов. Однако при отправке сообщения больше 300 символов - отправка не происходит. Возможно в спецификации ошибка: не байт а бит? Или это только у меня такая ситуация.
Байт, конечно же.
Мои игры с отправкой-приемом пакетов по 100-200 байт были неудачны. Сейчас ограничиваю себя 32-мя байтами, так надежнее проходит. Кроме того, стараюсь слать не чаще раза в 3-5 секунд.
не на каждой ардуине оперативки хватит
реально оперативки маловато.
Подскажите пожалуйста, если модуль настроен как точка доступа, есть ли ограничения на количество клиентов подключенных к данному модулю. Необходимо до 15 соединений и обмениваться информацией по tcp. По tcp одновременно будет идти обмен информацией только с одним клиентом.
Не держит он одновременно 15 конектов, максимум 4 TCP. А так же максимум 4 клиента в режиме точки доступа. В последнем SDK лимит увеличили до 8.
Про TCP я вкурсе что только до 4 соединений, но мне одновременно только 1 соединение необходимо. А вот то что столько мало клиентов это печально(( Выход только использовать отдельный роутер, да?
Да.
Может и не надо уже - но отвечу на вопрос о синхронизации времени с NTP через esp8266.
Работа с esp8266 идет без библиотек, только с помощью AT-команд.
Все пашет, время приходит всегда.
Ниже - вырезка из основной программы настенных часов, только то, что отностится к синхронизации по NTP.
а целиком скетч не покажите? хочу тоже часы.
Да пожалуйста!
Модуль esp8266 должен быть предварительно прошит прошивкой 1.0.0 SDK 0.22 и сконфигурирован (скорость порта, точка доступа, автоматическое подключение) через любую терминальную программу и переходник USB-UART на макетке с помощью АТ-команд. Читаем описание АТ-команд на esp8266.ru
Пользуйтесь!
Спасибо огромное.
Извиняюсь за офтоп. но не нашел на форуме ЛС. поэтому спрошу semenov2009 тут.
Но отчего то не получается время от NTP. каждый раз получается ответ 7C55ABBB ->>>> 2085989307
Date time is: 7.2.2036 - 9:28:27. Подскажите куда копать.
Всем привет!
Подскажите пожалуйста, что сжелать с этим ESP 8266 чтоб он заработал наконец то!!!
Имею:
Arduino UNO R3 (1 шт.) , DHT-11 (2 шт.), ESP8266 (1 шт.)
Хочется сделать отправку данных температуры и влажности на Народный мониторинг.
С чего вообще начинать???
Имею:
Arduino UNO R3 (1 шт.) , DHT-11 (2 шт.), ESP8266 (1 шт.)
Хочется сделать отправку данных температуры и влажности на Народный мониторинг.
С чего вообще начинать???
Для этого ардуина не нужна.
У меня похожие цифры получались, когда NTP сервер в четырех байтах возвращал FFFFFFFF.
Я вылечил выбором сервера belgim.by.
Попробуйте NTP сервера российского ВНИИФТРИ (эталон времени РФ), или задержки для получения ответа увеличить. Как мне показалось, esp8266 любит неторопливую работу.
Еще установите увеличенный буфер для SoftwareSerial. Рекомендуют 256.
Мне попробовать не на чем - часы уже на стене висят и четко пашут.
А вообще, я начинал с макетки и терминальной программки CoolTerm. Читаем описание АТ-команд, задаем руками, смотрим в терминале ответ, осознаем. Возможно, загоните модуль в бессознательное состояние - лечим перепрошивкой и начинаем заново: AT+RST и далее ...
Самый лучший сайт ИМХО - esp8266.ru.
да с ESP с большего все понятно. до отправки данных на NTP все работает (выбор режима модуля, сброс модуля, коннект к WiFi, коннект к NTP, после обмена с NTP закрытие соединения и отключение от WiFi). а вот проконтролировать что уходит и что приходит от NTP мозгов не хватает. из того ответа NTP что вижу в скетче первые 4 числа есть (третье меняется), остальные FF.
Предположу еще плохое питание. Я свою всегда от отдельного стаба питал и электролит на 200 мкф рядом с контактами ставил.
Т.е. во всех символах ответа NTP должно быть что то отличное от FF? а что надо ему посылать? есть ли какая то одна строка? что бы через ESPlorer к примеру ручками послать и посмотреть ответ
В четырех значащих байтах - 40,41,42,43. 43 младший. Количество секунд с 1.01.1900 г. Можно на калькуляторе посчитать, чтобы понять что должно прийти.
А чтобы послать ему нужные 48 байт - я их вычислял из функции setNTPpacketBuffer(), набирал в HEX-редакторе, копировал и отправлял на приглашение модуля.
Тогда как прошить ESP, без Ардуино и прошивальщика?! Как ваще понять что ESP живой?
Как в ESP забить данные моей Wi-Fi сети?
примерно так проверить, а вот так можно настроить
На этапе проверки, при подаче питания +3.3 вольт на VCC и GND на esp8266 загораются синий (тускло) и красные светодиоды.
При одключении третьего провода к разъему CH_PD, гаснут оба светодиода.
Как я понимаю, это не нормально?!
+ на VCC - на GND? а что за третий?
+ на VCC - на GND? а что за третий?
В ссылке которую ты дал указано что +3,3 вольта подать на CH_PD
Ну тогда да. откуда берешь 3,3В? может источник не вытягивает?
Ну я бы рекомендовал иметь USB-TTL адаптер. Но можно и Вашу ардуинку для этого использовать. Адаптер у неё на борту. Пропишите в ардуинку любой скетч не использующий сериал-порт и подключив к RX ардуины RX esp8266, а к TX соответственно TX получите USB-TTL адаптер из ардуины. Ну и 3.3 вольта для esp8266 (обычно) надо. И учтите, что она достаточно прожорливая во время работы радиомодуля.
Ну тогда да. откуда берешь 3,3В? может источник не вытягивает?
3,3 вольт беру с Ардуино Уно.