И мне такая цяцька приехала. Сегодня подключал к конвертору USB/UART. Завелась на 9600. АТ команды работаю к роутеру коннектица без замечаний. О здоровом питании модуля - для USB/UART обещают выдать до 5мА а надо 200, я даже пробовать не стал. Тем более что выход прост и известен, питал от +5 через два последовательно включенных диода. Получается 5-2*0,7=3,6В. Как раз то, что надо. Даже конденсаторами на питание не заморачивался, проработало часа 2 без сбоев и нагрева. Пока все гуд. Д
ПС. Будете питать через диоды - убедитесь что они обычные кремниевые, не шотке или ещё какие, а то если чё - я не виноват ;)
Подскажите плиз, в чем может быть проблема. Wi-Fi модуль ESP8266 подключен к HardwareSerial Arduino Nano на скорости 115200. К Wi-Fi сети подключается. С помощью библиотеки uartWIFI.h поднимаю веб-сервер.
GET запрос доходит до ардуино(включается светодиод), но он виснет. Не возвращается ответ. Вот код, который обрабатывает запрос:
Проблема в том что надо формировать страничку в памяти чтобы знать её размер, чтобы генерировать правельно код страницы. Чтобы передавать Content-Length...
Спасибо! Очень полезные статьи! Я обернул все строки в макрос F(), перенес часть переменных из глобальных в локальные и вынес всю логику из loop в отдельные функции. Высвобожденной памяти хватило чтобы web server нормально обрабатывал get запросы. Наверное попробую еще библиотеку Flash для работы с PROGMEM
Всем доброго времени суток.
Возможно вопрос конечно не совсем по теме.
Продолжаю переводить все свои устройства с Nrf24 на wifi. При переводе устройства протечек воды выскочила проблема.
if(Serial1.find("OK")){Serial.println("OK, Strart TCP Server");}else{Serial.println("Can not start TCP Server");}
230
Serial1.println("AT+CIPSTO=120");
231
Serial1.flush();
232
delay(1000);
233
//отправляем информацию об устройстве при его старте
234
Serial.println("Senting Startup info");
235
String msg= "water_";
236
msg+= ip;
237
if(sendMSG(id,msg,true))
238
{
239
Serial.println("Startup info was send");
240
returntrue;
241
}
242
else
243
{
244
Serial.println("Startup info was not send");
245
returnfalse;
246
}
247
}
248
else
249
{
250
Serial.println("Can not connect to the WiFi.");
251
returnfalse;
252
}
253
}
Исходные данные:
Arduino : pro micro.
Wifi: ESP 07.
Краны: электромагнитные 12В.
Включение/выключение кранов происходит через мосфет.
Питание кранов и платы: источник 12В, 1.5А подается на raw(arduino).
Управление кранов : 5В.
Питание wifi: преобразователь с 5 до 3.3 В.
Проблема в следующем: при подключении внешнего источника питания плата начинает перезагружаться. С NRF24 проблем нет.
При чем если закоментировать часть кода с wifi, то все нормально работает.
Если оставлять только код с wifi, то плата перезагружается. При этом чип на arduino сильно нагревается(видимо из-за это и происходит перезагрузка).
Брал десяток таких, в основном как небольшую зарядку для телефона или Ардуину на столе включить, за год пара уже померла, напряжение не очень стабильно 5 Вольт, ток полампера максимум, разборка трупиков показала что внутри они выглядят совсем не кошерно, хотя и терпимо за такие деньги.
Заменил слово "хороший" на "оптимальный". Думаю так будет точней. Перебрал 5-6 вариантов зарядок остановился именно на этом. И мобилу можно всегда подзарядить и модулю с дисплем вполне хватает.
Хочу заменить модуль w5100 на эти ESP, есть модули версии 01 и 12, прочитав ветку понял что еще нету библиотек без гемора заменяющие езернет шилд? Есть кто уже этом занимался? У меня метеостанция на народмон данные шлет, может кто поделится частью кода? Или придется велосипед заново изобретать? Мне просто пока не нужны все эти примочки с GPIO, мне бы просто от платы избавится от w5100. Будьте добры поделитесь или ткните на подходящий пример.
А кто-нибудь сталкивался со странным зависанием модуля? Запрос до него доходит, ардуино его отрабатывает и возвращает ответ, но модуль не передает этот ответ клиенту. В итоге клиент отваливается по таймауту. Причем первые несколько запросов запросов обрабатываются нормально
Увы, иногда не помогает. Схемотехника - откровенное говно, пока ее вылижут хотя бы до состояния ардуины - пройдет много времени: у меня из трех попыток - ни одного раза схема нормально не запустилась: питание от отдельной батареи и от сдвоенного AMC1117 на радиаторе.
Хочу заменить модуль w5100 на эти ESP, есть модули версии 01 и 12, прочитав ветку понял что еще нету библиотек без гемора заменяющие езернет шилд? Есть кто уже этом занимался? У меня метеостанция на народмон данные шлет, может кто поделится частью кода? Или придется велосипед заново изобретать? Мне просто пока не нужны все эти примочки с GPIO, мне бы просто от платы избавится от w5100. Будьте добры поделитесь или ткните на подходящий пример.
Все уже изобретено.
Двумя постами выше выкладывал скетч и ссылки на библиотеку без эзернет-шилда.
Пробовал ее, классная библиотека, но было бы еще круче, если у нее был бы удобный интерфес для работы с ардуино. Чтобы максимально извлечь пользу из модуля. Пытался подружить ее с ардуино по протоколу I2C, но что-то не получилось да и не очень удобно отправлять команды в запросах типа /i2cgo?adr=20&set=FF.
Хочу заменить модуль w5100 на эти ESP, есть модули версии 01 и 12, прочитав ветку понял что еще нету библиотек без гемора заменяющие езернет шилд? Есть кто уже этом занимался? У меня метеостанция на народмон данные шлет, может кто поделится частью кода? Или придется велосипед заново изобретать? Мне просто пока не нужны все эти примочки с GPIO, мне бы просто от платы избавится от w5100. Будьте добры поделитесь или ткните на подходящий пример.
Все уже изобретено.
Двумя постами выше выкладывал скетч и ссылки на библиотеку без эзернет-шилда.
Спасибо, не обратил внимания на скетч, как раз на версии от студентпрогер у меня и собрано павда с изменениями, а самого ESP8266 пока не хватает на все мои хотелки сразу, а именно мне нужна связь с удаленным модулем 433 ООК ну еще LCD, но модуль ESP8266 вещица крайне полезная, и буду изучать.
Ваш же скетч несколькими постами выше где HW serial у меня вовсе не запустился, что там сказано о буфере HW serial? Я менял размер буфера в HardwareSerial.cpp
Да, дествительно - это мои эксперементы. Мы с разработчиком обертки все это попробовали.
Вывод один. Нехватка памяти при работе двух портов (программного и аппаратного) одновременно.
На поддержку программного порта похоже уходят все рессурсы.
Скетч, выложенный в этой ветке, написан без использования программного порта, поэтому он работает стабильно в цикле.
Я задачу разбил на две подзадачи. Вначале отладил с применением монитора формирование пакета данных и отправку на НМ. Затем убрал софтпорт из скетча и уже в темную запустил модуль через аппаратный порт.
У тех Ардуин которые имеют два аппаратных порта, таких проблем не должно быть.
Увы, иногда не помогает. Схемотехника - откровенное говно, пока ее вылижут хотя бы до состояния ардуины - пройдет много времени: у меня из трех попыток - ни одного раза схема нормально не запустилась: питание от отдельной батареи и от сдвоенного AMC1117 на радиаторе.
O как!
Ничего я из платы ардуино не выдираю, и так все шьется!
Связываюсь с esp8266 по одноу порту , терминалю по-другому.
Нету у меня конвертора :(
У меня подключено так:
https://cloud.mail.ru/public/45180a4b237e/IMG_20150129_163337.jpg
я тоже не буду читать - это авторство onliner.by
а еще я тоже не буду смотреть - это уже мое авторство
И мне такая цяцька приехала. Сегодня подключал к конвертору USB/UART. Завелась на 9600. АТ команды работаю к роутеру коннектица без замечаний. О здоровом питании модуля - для USB/UART обещают выдать до 5мА а надо 200, я даже пробовать не стал. Тем более что выход прост и известен, питал от +5 через два последовательно включенных диода. Получается 5-2*0,7=3,6В. Как раз то, что надо. Даже конденсаторами на питание не заморачивался, проработало часа 2 без сбоев и нагрева. Пока все гуд. Д
ПС. Будете питать через диоды - убедитесь что они обычные кремниевые, не шотке или ещё какие, а то если чё - я не виноват ;)
Подскажите плиз, в чем может быть проблема. Wi-Fi модуль ESP8266 подключен к HardwareSerial Arduino Nano на скорости 115200. К Wi-Fi сети подключается. С помощью библиотеки uartWIFI.h поднимаю веб-сервер.
GET запрос доходит до ардуино(включается светодиод), но он виснет. Не возвращается ответ. Вот код, который обрабатывает запрос:
01
void
loop
()
02
{
03
readDataFromTempSensor();
04
char
buf[500];
05
int
iLen = wifi.ReceiveMessage(buf);
06
if
(iLen > 0)
07
{
08
delay(100);
09
10
String cmd;
11
cmd =
"HTTP/1.1 200 OK\r\n"
;
12
cmd +=
"Content-Type: text/html\r\n"
;
13
cmd +=
"Connection: close\r\n"
;
14
cmd +=
"Refresh: 8\r\n"
;
15
cmd +=
"\r\n"
;
16
cmd +=
"<!DOCTYPE HTML>\r\n"
;
17
cmd +=
"<html><body>\r\n"
;
18
cmd +=
"Current temperature is "
;
19
cmd += String(currentTemp);
20
cmd +=
"</body></html>\r\n"
;
21
22
digitalWrite(ledPin, HIGH);
23
wifi.Send(chlID,cmd);
24
delay(300);
25
wifi.closeMux(chlID);
26
delay(1000);
27
}
28
}
Я уже писал про это, что есп8266+ардуина(328 чип) - не получить веб сервер. Надо много ОЗУ и по этому будет работать только на ардуино мега и выше.
По поводу нехватки ОЗУ - есть ещё флэш память куда обычно закидывают неизменяемые строки типа
"HTTP/1.1 200 OK\r\n"
А так конечно не хватит если всё хранить в оперативке...
Я уже давно привык сериалпринт только с макросом "Ф" использовать. Даже если это всего-лишь "Привет Мир!" ;)
Проблема в том что надо формировать страничку в памяти чтобы знать её размер, чтобы генерировать правельно код страницы. Чтобы передавать Content-Length...
По поводу нехватки ОЗУ - есть ещё флэш память куда обычно закидывают неизменяемые строки типа
"HTTP/1.1 200 OK\r\n"
А вы могли бы примерчиком поделиться? Надо неизменяемые строки в константах хранить?
Во флэш памяти.....В памяти программ.....
http://arduino.cc/en/Reference/PROGMEM
http://scott.dd.com.au/wiki/Arduino_Static_Strings
http://forum.arduino.cc/index.php?topic=106603.0
Спасибо! Очень полезные статьи! Я обернул все строки в макрос F(), перенес часть переменных из глобальных в локальные и вынес всю логику из loop в отдельные функции. Высвобожденной памяти хватило чтобы web server нормально обрабатывал get запросы. Наверное попробую еще библиотеку Flash для работы с PROGMEM
Всем доброго времени суток.
Возможно вопрос конечно не совсем по теме.
Продолжаю переводить все свои устройства с Nrf24 на wifi. При переводе устройства протечек воды выскочила проблема.
Вот сам скетч:
001
//блок с библиотеками
002
//блок с определениями
003
#define SSID "SmartHome" //имя сети
004
#define PASS "12345678" //пароль
005
#define DST_IP "192.168.0.10" //ip web сервера
006
#define MIN_LIGHT 0
007
#define MAX_LIGHT 255
008
#define START_CHAR '!' //начальный символ принимаемого сообщения
009
#define END_CHAR '$' //конечный символ принимаесого сообщения
010
#define sensor_pin A1 //пин датчика протечки
011
#define power_pin 3 //управляющий пин мосфета
012
#define hardReset 6 //пин arduino, на котором весит ch_pd
013
//блок с константами
014
const
String id=
"wat01"
;
//id устройства
015
//блок с переменными
016
String WiFiMessage=
""
;
//принимаемое сообщение
017
unsigned
int
readChar;
//переменная для посимвольного чтения сообщения
018
boolean readingWiFi;
//флаг чтения сообщения
019
String ip =
""
;
//переменна€ для хранения ip устройства
020
char
character;
021
boolean connected=
false
;
//флаг соединения WiFi
022
int
i=1;
023
static
unsigned
long
time_fade;
024
/*возможные начения для флага:
025
а: автоматический режим
026
о: открыть кран
027
с: закрыть кран
028
*/
029
String flag_radio =
"a"
;
//флаг режима
030
031
void
setup
()
032
{
033
pinMode(hardReset, OUTPUT);
034
pinMode(power_pin, OUTPUT);
035
Serial
.begin(9600);
036
Serial
.setTimeout(5000);
037
Serial1.begin(9600);
038
Serial1.setTimeout(5000);
039
digitalWrite(hardReset, LOW);
040
delay(100);
041
digitalWrite(hardReset, HIGH);
042
digitalWrite(power_pin, HIGH);
///открываем кран
043
delay(5000);
044
for
(
int
i=0;i<5;i++)
045
{
046
if
(connectWiFi())
047
{
048
connected =
true
;
049
break
;
050
}
051
}
052
if
(!connected){
while
(1); }
053
delay(2000);
054
}
055
056
void
loop
()
057
{
058
if
(Serial1.available() > 0 && !readingWiFi)
059
{
060
if
(Serial1.read() == START_CHAR)
061
{
062
WiFiReadData();
063
}
064
}
065
if
(flag_radio==
"a"
)
066
{
067
digitalWrite(power_pin, HIGH);
///открываем кран
068
if
(millis()>time_fade)
069
{
070
if
(analogRead(sensor_pin)>=900)
071
{
072
sendMSG(id,
"leak"
,
false
);
073
flag_radio=
"c"
;
074
}
075
else
076
{
077
flag_radio==
"a"
;
078
}
079
time_fade=millis()+30;
080
}
081
}
082
else
083
{
084
if
(flag_radio==
"o"
)
085
{
086
digitalWrite(power_pin, HIGH);
///открываем кран
087
}
088
else
089
{
090
digitalWrite(power_pin, LOW);
///закрываем кран
091
}
092
}
093
}
094
//функция чтения данных, пришедших от web-сервера
095
void
WiFiReadData()
096
{
097
WiFiMessage =
""
;
098
readingWiFi =
true
;
099
iniReading:
100
if
(Serial1.available() > 0)
101
{
102
readChar = Serial1.read();
103
if
(readChar == END_CHAR)
104
{
105
goto
endReading;
106
}
107
else
108
{
109
WiFiMessage+=
char
(readChar);
110
goto
iniReading;
111
}
112
}
113
goto
iniReading;
114
endReading:
115
readingWiFi =
false
;
116
//Serial.println(WiFiMessage);
117
///здесь парсинг сообщения и последующие действия
118
int
pos_=WiFiMessage.indexOf(
'_'
);
119
String command_t=WiFiMessage.substring(0, pos_);
120
String command_v=WiFiMessage.substring(pos_+1);
121
122
if
(command_t==
"water"
)
123
{
124
flag_radio=command_v;
125
}
126
}
127
/*функция отправки сообщения web-серверу*/
128
boolean sendMSG(String modul_id,String value,boolean startMSG)
129
{
130
String cmd =
"AT+CIPSTART=1,\"TCP\",\""
;
131
cmd += DST_IP;
132
cmd +=
"\",80"
;
133
//Serial.println("Connecting to WebServer");
134
Serial1.println(cmd);
135
Serial1.flush();
136
delay(1000);
137
/*if(Serial1.find("OK"))
138
{
139
Serial.print("OK, Connected to WebServer ");
140
Serial.println(DST_IP);
141
}
142
else
143
{
144
Serial.print("Can not connect to WebServer ");
145
Serial.println(DST_IP);
146
}*/
147
String msg=
"GET /ajax/arduino_read.php?act="
;
148
if
(startMSG)
149
{
150
msg+=
"new_w&id="
;
151
}
152
else
153
{
154
msg+=
"s_s&id="
;
155
}
156
msg+= modul_id;
157
msg+=
"&val="
;
158
msg+= value;
159
msg+=
" HTTP/1.1\r\nHost: "
;
160
msg+= DST_IP;
161
msg+=
":80\r\n\r\n"
;
162
Serial1.print(
"AT+CIPSEND=1,"
);
163
Serial1.println(msg.length());
164
//Serial.println("Senting MSG");
165
if
(Serial1.find(
">"
))
166
{
167
//Serial.print("MSG text: ");
168
//Serial.println(msg);
169
Serial1.print(msg);
170
Serial1.flush();
171
}
172
if
(Serial1.find(
"SEND OK"
))
173
{
174
return
true
;
175
}
176
else
177
{
178
return
false
;
179
}
180
}
181
182
/*функция конекта к wifi сети*/
183
boolean connectWiFi()
184
{
185
ip=
""
;
186
Serial1.println(
"AT+CWMODE=1"
);
187
String cmd=
"AT+CWJAP=\""
;
188
cmd+=SSID;
189
cmd+=
"\",\""
;
190
cmd+=PASS;
191
cmd+=
"\""
;
192
Serial
.print(
"Connecting to "
);
193
Serial
.println(SSID);
194
Serial1.println(cmd);
195
delay(1000);
196
if
(Serial1.find(
"OK"
))
197
{
198
Serial
.println(
"OK, Connected to WiFi."
);
199
Serial1.println(
"AT+CIFSR"
);
200
Serial1.flush();
201
delay(1000);
202
while
(Serial1.available())
203
{
204
character=Serial1.read();
205
ip.concat(character);
206
}
207
int
pos_=ip.substring(13).indexOf(
char
(13));
208
String tostr=ip.substring(13, 13+pos_);
209
ip=
""
;
210
for
(
int
i=0;i<tostr.length();i++)
211
{
212
if
(tostr.charAt(i)==
'.'
|| tostr.charAt(i)>=
'0'
&& tostr.charAt(i)<=
'9'
)
213
ip.concat(tostr.charAt(i));
214
}
215
if
(ip !=
""
)
216
{
217
Serial
.print(
"IP Address: "
);
218
Serial
.println(ip);
219
}
220
///включаем режим приема/передачи
221
Serial1.println(
"AT+CIPMODE=0"
);
222
Serial1.println(
"AT+CIPMUX=1"
);
223
Serial1.flush();
224
delay(1000);
225
Serial
.println(
"Starting TCP Server"
);
226
Serial1.println(
"AT+CIPSERVER=1,80"
);
227
Serial1.flush();
228
delay(1000);
229
if
(Serial1.find(
"OK"
)){
Serial
.println(
"OK, Strart TCP Server"
);}
else
{
Serial
.println(
"Can not start TCP Server"
);}
230
Serial1.println(
"AT+CIPSTO=120"
);
231
Serial1.flush();
232
delay(1000);
233
//отправляем информацию об устройстве при его старте
234
Serial
.println(
"Senting Startup info"
);
235
String msg=
"water_"
;
236
msg+= ip;
237
if
(sendMSG(id,msg,
true
))
238
{
239
Serial
.println(
"Startup info was send"
);
240
return
true
;
241
}
242
else
243
{
244
Serial
.println(
"Startup info was not send"
);
245
return
false
;
246
}
247
}
248
else
249
{
250
Serial
.println(
"Can not connect to the WiFi."
);
251
return
false
;
252
}
253
}
Исходные данные:
Arduino : pro micro.
Wifi: ESP 07.
Краны: электромагнитные 12В.
Включение/выключение кранов происходит через мосфет.
Питание кранов и платы: источник 12В, 1.5А подается на raw(arduino).
Управление кранов : 5В.
Питание wifi: преобразователь с 5 до 3.3 В.
Проблема в следующем: при подключении внешнего источника питания плата начинает перезагружаться. С NRF24 проблем нет.
При чем если закоментировать часть кода с wifi, то все нормально работает.
Если оставлять только код с wifi, то плата перезагружается. При этом чип на arduino сильно нагревается(видимо из-за это и происходит перезагрузка).
Как здесь может влиять на все это esp модуль?
.....Во первых прочтите предыдущий пост.... http://arduino.ru/forum/apparatnye-voprosy/polzuet-li-kto-wifi-moduli-es...
.....Во первых прочтите предыдущий пост.... http://arduino.ru/forum/apparatnye-voprosy/polzuet-li-kto-wifi-moduli-es...
извените. а какой номер сообщения?
410 Про букву "Ф" читайте, может быть у вас памяти не хватает....
Спасибо. но дело не в памяти- точно.
Загружаю следующий скетч:
01
#define SSID "SmartHome" //им€ сети
02
#define PASS "12345678" //пароль
03
#define DST_IP "192.168.0.10" //ip web сервера
04
char
character;
05
int
hardReset = 6;
//пин arduino, на котором весит ch_pd
06
unsigned
int
readChar;
//переменная для посимвольного чтения сообщения
07
String WiFiMessage=
""
;
//принимаемое сообщение
08
void
setup
()
09
{
10
pinMode(hardReset, OUTPUT);
11
Serial
.begin(9600);
12
Serial
.setTimeout(5000);
13
Serial1.begin(9600);
14
Serial1.setTimeout(5000);
15
digitalWrite(hardReset, LOW);
16
delay(100);
17
digitalWrite(hardReset, HIGH);
18
delay(5000);
19
}
20
void
loop
()
21
{
22
23
Serial
.println(
"Send AT+CWMODE=1"
);
24
Serial1.println(
"AT+CWMODE=1"
);
25
Serial1.flush();
26
delay(1000);
27
if
(Serial1.find(
"OK"
)){
Serial
.println(
"answer OK"
);}
else
{
Serial
.println(
"answer no found OK"
);}
28
Serial
.println(
"send AT+CWJAP"
);
29
String cmd=
"AT+CWJAP=\""
;
30
cmd+=SSID;
31
cmd+=
"\",\""
;
32
cmd+=PASS;
33
cmd+=
"\""
;
34
Serial1.println(cmd);
35
Serial1.flush();
36
delay(1000);
37
if
(Serial1.find(
"OK"
)){
Serial
.println(
"answer OK"
);}
else
{
Serial
.println(
"answer no found OK"
);}
38
Serial
.println(
"send AT+CIPMODE=0"
);
39
Serial1.println(
"AT+CIPMODE=0"
);
40
Serial1.flush();
41
delay(1000);
42
if
(Serial1.find(
"OK"
)){
Serial
.println(
"answer OK"
);}
else
{
Serial
.println(
"answer no found OK"
);}
43
Serial
.println(
"send AT+CIPMUX=1"
);
44
Serial1.println(
"AT+CIPMUX=1"
);
45
Serial1.flush();
46
delay(1000);
47
if
(Serial1.find(
"OK"
)){
Serial
.println(
"answer OK"
);}
else
{
Serial
.println(
"answer no found OK"
);}
48
Serial
.println(
"Send AT+CIPSERVER=1,80"
);
49
Serial1.println(
"AT+CIPSERVER=1,80"
);
50
Serial1.flush();
51
delay(1000);
52
if
(Serial1.find(
"OK"
)){
Serial
.println(
"answer OK"
);}
else
{
Serial
.println(
"answer no found OK"
);}
53
Serial
.println(
"Send AT+CIPSTO=120"
);
54
Serial1.println(
"AT+CIPSTO=120"
);
55
Serial1.flush();
56
delay(1000);
57
if
(Serial1.find(
"OK"
)){
Serial
.println(
"answer OK"
);}
else
{
Serial
.println(
"answer no found OK"
);}
58
cmd =
"AT+CIPSTART=1,\"TCP\",\""
;
59
cmd += DST_IP;
60
cmd +=
"\",80"
;
61
Serial1.println(cmd);
62
Serial1.flush();
63
64
delay(1000000);
65
66
}
в котором просто прогоняю последовательно все AT команды.
Так вот при питании от USB все хорошо.
При включении внешнего источника на 12В - плата перезагружается.
И вот что еще интересного выяснилось- при использовании источника питания на 9В- все тоже хорошо.
При включении внешнего источника на 12В - плата перезагружается.
И вот что еще интересного выяснилось- при использовании источника питания на 9В- все тоже хорошо.
Так может источник питания 12В просто разряжен? У меня, когда питания не хватало, arduino с esp тоже начинала глючить.
Источник питания сетевой. Измерения мультиметром- показывают 12В
Вы питаете ESP8266 от 3,3В Ардуино ?
я питаю от arduino, но через преобразователь 5в на 3,3в. Pro micro не имеет питания на 3.3В только на 5В.
Попробуйте запитать от внешнего источника.
Пожалуйста, прошу вас, не называйте преобразователями линейные стабилизаторы вроде 1117 .....
Преобразователь- это несколько другое.... вроде этих http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR0...
С входным напряжением 25.... 30...40... Вольт и выходным от 1 Вольта до почти питания, с КПД 80% и выше и токи в единицах Ампера...
*Хозяйке на заметку (Если будет кто иметь дело с исполнением ESP-201) :
esp8266 ESP-201 (беленький такой, с кучей пинов)
- для запуска CHIP_EN -> 3V3, IO15 -> Ground
- для перепрошивки IO0 -> Ground
Еще полезности по нему - здесь: http://smarpl.com/content/esp8266-esp-201-module-antenna-troubleshooting
Попробуйте запитать от внешнего источника.
Так я от такого и питаю- пост выше
Пожалуйста, прошу вас, не называйте преобразователями линейные стабилизаторы вроде 1117 .....
Преобразователь- это несколько другое.... вроде этих http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR0.TRC0.H0.Xlm2596&_nkw=lm2596&_sacat=0
С входным напряжением 25.... 30...40... Вольт и выходным от 1 Вольта до почти питания, с КПД 80% и выше и токи в единицах Ампера...
Хорошо учту- буду назвать их линейными стабилизаторами. Что касаемо в электронике я не спец, я только учусь))
Попробуйте запитать от внешнего источника.
Так я от такого и питаю- пост выше
Тот, где написано "я питаю от arduino" ?
Попробуйте запитать от внешнего источника.
Так я от такого и питаю- пост выше
Тот, где написано "я питаю от arduino" ?
неа . пост 417.
Если берете 5В с Ардуино - плохо. Если 12В с внешнего источника - хорошо.
/* обертка от автора <a href="https://github.com/anakod/ESP8266pro" rel="nofollow">https://github.com/anakod/ESP8266pro</a> .
Прошивка ESP АТ20 <a href="http://esp8266.ru/esp8266-atv20-sdk094/" rel="nofollow">http://esp8266.ru/esp8266-atv20-sdk094/</a>
скеч выводит на Народный монитор влажность и температуру с комнатного и уличного DHT,
температуру с наружного термодатчика DS,
показания барометра.
На дисплей выводит температуру комнатную с внутреннего DHT и температуру наружную.
*/
#include <ESP8266pro.h>
#include <ESP8266proClient.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <Wire.h>
#include <BMP085.h>
#include <DHT.h>
//*******************************************************************
#define DHTPINS 7 // пин подключения датчика влажности DHT уличный
#define DHTPIN 6 // пин подключения датчика влажности DHT на плате
#define DHTTYPES DHT11 // тип датчика влажности DHT22/DHT11 (уличный)
#define DHTTYPE DHT11 // тип датчика влажности DHT22/DHT11 (комнатный)
//#define DHTTYPE DHT22 // тип датчика влажности DHT22/DHT11
#define DS18B20_PIN 3 // пин подключения термодатчика DS18B20, если датчиков несколько, все цепляем на один пин.
#define postingInterval 600000 // интервал между отправками данных в миллисекундах (5 минут=300000,10 минут=600000)
const
int
LED = 13;
// на плате (зеленый - процесс идет)
LiquidCrystal_I2C lcd(0x27,16,2);
OneWire ds(DS18B20_PIN);
int
CountSensors;
// количество найденных датчиков температуры
BMP085 dps = BMP085();
DHT dht(DHTPIN, DHTTYPE);
DHT dhts(DHTPINS, DHTTYPES);
byte
mac[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
//MAC-WiFi модуля
char
macbuf[13];
char
replyBuffer[160];
// буфер для отправки
unsigned
long
lastConnectionTime = 0;
// время последней передачи данных
int
HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
long
Pressure = 0;
float
Humidity = 0;
float
Temperatura = 0;
int
val = 0;
//----------------------------
ESP8266pro wifi(
Serial
);
// ESP, DBG
const
char
* ssid =
"myClient"
;
const
char
* password =
"myPass"
;
void
setup
()
{
lcd.init();
// Инициализируем экран
lcd.backlight();
//включаем подсветку
//Устанавливаем позицию начиная с которой выводится текст.
lcd.setCursor(0,0);
//выводим строку 1
lcd.print(
"Temp str: "
);
//Температура на улице (9 символов)
lcd.setCursor(0,1);
//выводим строку 2
lcd.print(
"Temp room: "
);
//Температура в комнате (10 символов)
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
//error
Serial
.begin(115200);
//аппаратный порт (9-RX, 10-TX)
while
(!
Serial
) {
;
// wait for serial port to connect. Needed for Leonardo only
}
// Initialize ESP
wifi.begin(eODM_None);
// Disable all debug messages
// Connect to WiFi network
// In future ESP should automatically reconnect
// to this network, if requried
do
{
if
(!wifi.stationConnect(ssid, password))
delay(3000);
}
while
(wifi.stationIP() == NULL_IP);
//---------------------------------------------
//Узнаём количество термодатчиков
CountSensors = DsCount();
//запускаем процессы
Wire.begin();
dps.init();
dhts.begin();
dht.begin();
lastConnectionTime = millis()-postingInterval+15000;
//первое соединение через 15 секунд после запуска
}
void
loop
()
{
//если прошло определённое время, то делаем замер и отправляем данные
if
(millis() - lastConnectionTime > postingInterval) {
digitalWrite(LED, LOW);
//error!
devices();
//опрос датчиков
SendNM();
//отправляем показания
lastConnectionTime = millis();
}
}
//////////////////////////////////////////////////////////////
/////п/программа чтения буфера
void
printResponse(ESP8266proConnection* connection,
char
* buffer,
int
length, boolean completed)
{
if
(completed) digitalWrite(LED, HIGH);
//передача OK
else
digitalWrite(LED, LOW);
//error!
}
////////////////////////////////////п/программа для отправки данных
void
SendNM(){
// Send request
ESP8266proClient con(wifi, printResponse);
con.connectTcp(
"94.19.113.221"
, 8283);
//norodmon.ru
con.send(replyBuffer);
con.waitResponse();
con.close();
}
//////////////////////////////////п/программа сбора данных
void
devices(){
memset(replyBuffer, 0,
sizeof
(replyBuffer));
strcpy(replyBuffer,
"#"
);
//Передача МАК
memset(macbuf, 0,
sizeof
(macbuf));
//Конвертируем MAC-адрес
for
(
int
k=0; k<6; k++)
{
int
b1=mac[k]/16;
int
b2=mac[k]%16;
char
c1[2],c2[2];
if
(b1>9) c1[0]=(
char
)(b1-10)+
'A'
;
else
c1[0] = (
char
)(b1) +
'0'
;
if
(b2>9) c2[0]=(
char
)(b2-10)+
'A'
;
else
c2[0] = (
char
)(b2) +
'0'
;
c1[1]=
'\0'
;
c2[1]=
'\0'
;
strcat(macbuf,c1);
strcat(macbuf,c2);
}
strcat(replyBuffer, macbuf);
strcat(replyBuffer,
"\n"
);
//-------------------------------------термометры шины W-1
//Сбрасываем поиск датчиков (кол-во нам уже известно)
ds.reset_search();
//Теперь в цикле опрашиваем все датчики сразу
for
(
int
j=0; j<CountSensors; j++)
{
byte
i;
byte
present = 0;
byte
data[12];
byte
addr[8];
if
( !ds.search(addr))
{
ds.reset_search();
return
;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1);
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for
( i = 0; i < 9; i++)
// we need 9 bytes
{
data[i] = ds.read();
}
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
SignBit = TReading & 0x8000;
// test most sig bit
if
(SignBit)
// negative
{
TReading = (TReading ^ 0xffff) + 1;
// 2's comp
}
Tc_100 = (6 * TReading) + TReading / 4;
// multiply by (100 * 0.0625) or 6.25
Whole = Tc_100 / 100;
// separate off the whole and fractional portions
Fract = Tc_100 % 100;
char
temp[3];
itoa(Whole,temp);
strcat(replyBuffer,
"#"
);
//одинарный символ перед датчиком
//конвертируем адрес термодатчика
for
(
int
k=7; k>=0; k--)
{
int
b1=addr[k]/16;
int
b2=addr[k]%16;
char
c1[2],c2[2];
if
(b1>9) c1[0]=(
char
)(b1-10)+
'A'
;
else
c1[0] = (
char
)(b1) +
'0'
;
if
(b2>9) c2[0]=(
char
)(b2-10)+
'A'
;
else
c2[0] = (
char
)(b2) +
'0'
;
c1[1]=
'\0'
;
c2[1]=
'\0'
;
strcat(replyBuffer, c1);
strcat(replyBuffer, c2);
}
strcat(replyBuffer,
"#"
);
//разделительный символ перед показанием
lcd.setCursor(12, 0);
//подготавливаем дисплей
if
(SignBit)
//если температура отрицательная, добавляем знак минуса
{
strcat(replyBuffer,
"-"
);
lcd.print(
"-"
);
}
strcat(replyBuffer,temp);
lcd.print(temp);
//температура на дисплее
lcd.print((
char
)223);
lcd.print(
"C "
);
strcat(replyBuffer,
"."
);
if
(Fract<10)
{
strcat(replyBuffer,
"0"
);
}
itoa(Fract,temp);
strcat(replyBuffer,temp);
strcat(replyBuffer,
"\n"
);
//конец показания датчика
}
char
temp[8];
long
p_100, h_100;
//---------------------------- барометр
#if BMP085_EXIST == 1
strcat(replyBuffer,
"#"
);
//одинарный символ перед датчиком
strcat(replyBuffer, macbuf);
strcat(replyBuffer,
"01"
);
strcat(replyBuffer,
"#"
);
//разделительный символ перед показанием
dps.getPressure(&Pressure);
p_100 = Pressure/1.333;
Whole = p_100 / 100;
Fract = p_100 % 100;
itoa(Whole, temp);
strcat(replyBuffer, temp);
strcat(replyBuffer,
"."
);
if
(Fract<10)
{
strcat(replyBuffer,
"0"
);
}
itoa(Fract, temp);
strcat(replyBuffer, temp);
strcat(replyBuffer,
"\n"
);
//конец показания датчика
#endif
//------------------------------- влажность улица
#if DHT_EXISTS == 1
Humidity = dhts.readHumidity();
strcat(replyBuffer,
"#"
);
//одинарный символ перед датчиком
strcat(replyBuffer, macbuf);
strcat(replyBuffer,
"02"
);
strcat(replyBuffer,
"#"
);
//разделительный символ перед показанием
h_100 = Humidity*100;
Whole = h_100 / 100;
Fract = h_100 % 100;
itoa(Whole, temp);
strcat(replyBuffer, temp);
strcat(replyBuffer,
"."
);
if
(Fract<10)
{
strcat(replyBuffer,
"0"
);
}
itoa(Fract, temp);
strcat(replyBuffer, temp);
strcat(replyBuffer,
"\n"
);
//конец показания датчика
#endif
//------------------------------- температура DHT комната
#if DHT_EXIST == 1
Temperatura= dht.readTemperature();
strcat(replyBuffer,
"#"
);
//одинарный символ перед датчиком
strcat(replyBuffer, macbuf);
strcat(replyBuffer,
"03"
);
strcat(replyBuffer,
"#"
);
//разделительный символ перед показанием
h_100 = Temperatura*100;
Whole = h_100 / 100;
Fract = h_100 % 100;
itoa(Whole, temp);
strcat(replyBuffer, temp);
//аналогично выводим вторую строку
lcd.setCursor(12, 1);
lcd.print(temp);
lcd.print((
char
)223);
lcd.print(
"C "
);
strcat(replyBuffer,
"."
);
if
(Fract<10)
{
strcat(replyBuffer,
"0"
);
}
itoa(Fract, temp);
strcat(replyBuffer, temp);
strcat(replyBuffer,
"\n"
);
//конец показания датчика
//------------------------------- влажность комната
Humidity = dht.readHumidity();
strcat(replyBuffer,
"#"
);
//одинарный символ перед датчиком
strcat(replyBuffer, macbuf);
strcat(replyBuffer,
"04"
);
strcat(replyBuffer,
"#"
);
//разделительный символ перед показанием
h_100 = Humidity*100;
Whole = h_100 / 100;
Fract = h_100 % 100;
itoa(Whole, temp);
strcat(replyBuffer, temp);
strcat(replyBuffer,
"."
);
if
(Fract<10)
{
strcat(replyBuffer,
"0"
);
}
itoa(Fract, temp);
strcat(replyBuffer, temp);
strcat(replyBuffer,
"\n"
);
//конец показания датчика
#endif
strcat(replyBuffer,
"##"
);
//конец передачи
strcat(replyBuffer,
'\0'
);
}
/////////////////////////////////// п/программа: Количество термодатчиков на шине
int
DsCount()
{
int
count=0;
bool
thatsall =
false
;
byte
addr[8];
do
{
if
( !ds.search(addr))
{
ds.reset_search();
thatsall =
true
;
}
count++;
}
while
(!thatsall);
return
(count-1);
}
int
len(
char
*buf)
{
int
i=0;
do
{
i++;
}
while
(buf[i]!=
'\0'
);
return
i;
}
/////////////////////////////////// п/программа reverse
void
reverse(
char
s[])
{
int
i, j;
char
c;
for
(i = 0, j = strlen(s)-1; i<j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
//////////////////////////////////////// п/программа itoa
void
itoa(
int
n,
char
s[])
{
int
i, sign;
if
((sign = n) < 0) /* записываем знак */
n = -n;
/* делаем n положительным числом */
i = 0;
do
{
/* генерируем цифры в обратном порядке */
s[i++] = n % 10 +
'0'
;
/* берем следующую цифру */
}
while
((n /= 10) > 0);
/* удаляем */
if
(sign < 0)
s[i++] =
'-'
;
s[i] =
'\0'
;
reverse(s);
}
////////////////////////////////////////////////////////////end
оптимальный для этого модуля блок питания на 5В 1А брал тут: http://ru.aliexpress.com/item/Free-Shipping-White-European-USB-AC-Wall-Power-Adapter-EU-Plug-Charger-For-iPhone-5-4/1852857784.html?recommendVersion=2
Брал десяток таких, в основном как небольшую зарядку для телефона или Ардуину на столе включить, за год пара уже померла, напряжение не очень стабильно 5 Вольт, ток полампера максимум, разборка трупиков показала что внутри они выглядят совсем не кошерно, хотя и терпимо за такие деньги.
Заменил слово "хороший" на "оптимальный". Думаю так будет точней. Перебрал 5-6 вариантов зарядок остановился именно на этом. И мобилу можно всегда подзарядить и модулю с дисплем вполне хватает.
Есть подороже, но по моему еще оптимальней: http://ru.aliexpress.com/item/Free-Shipping-New-Home-Wall-Power-Supply-USB-Socket-Switch-With-USB-Port-Interface-White/1006948075.html?isOrigTitle=true
Как приедут перейду на него.
Хочу заменить модуль w5100 на эти ESP, есть модули версии 01 и 12, прочитав ветку понял что еще нету библиотек без гемора заменяющие езернет шилд? Есть кто уже этом занимался? У меня метеостанция на народмон данные шлет, может кто поделится частью кода? Или придется велосипед заново изобретать? Мне просто пока не нужны все эти примочки с GPIO, мне бы просто от платы избавится от w5100. Будьте добры поделитесь или ткните на подходящий пример.
А кто-нибудь сталкивался со странным зависанием модуля? Запрос до него доходит, ардуино его отрабатывает и возвращает ответ, но модуль не передает этот ответ клиенту. В итоге клиент отваливается по таймауту. Причем первые несколько запросов запросов обрабатываются нормально
Питание нормальное дайте модулю...
MaksMS, Araris, попробую. Не посоветуете, как это проще организовать?
Питание нормальное дайте модулю...
Увы, иногда не помогает. Схемотехника - откровенное говно, пока ее вылижут хотя бы до состояния ардуины - пройдет много времени: у меня из трех попыток - ни одного раза схема нормально не запустилась: питание от отдельной батареи и от сдвоенного AMC1117 на радиаторе.
Все уже изобретено.
Двумя постами выше выкладывал скетч и ссылки на библиотеку без эзернет-шилда.
А если в мдуль загрузить вот эту прошивку: http://homes-smart.ru/index.php/oborudovanie/bez-provodov-wi-fi/62-besprovodnoj-datchik-na-baze-esp8266-dlya-servisa-narodmon-ru, так и Ардуина совсем не нужна.
Двумя постами выше выкладывал скетч и ссылки на библиотеку без эзернет-шилда.
А если в мдуль загрузить вот эту прошивку: http://homes-smart.ru/index.php/oborudovanie/bez-provodov-wi-fi/62-besprovodnoj-datchik-na-baze-esp8266-dlya-servisa-narodmon-ru, так и Ардуина совсем не нужна.
Пробовал ее, классная библиотека, но было бы еще круче, если у нее был бы удобный интерфес для работы с ардуино. Чтобы максимально извлечь пользу из модуля. Пытался подружить ее с ардуино по протоколу I2C, но что-то не получилось да и не очень удобно отправлять команды в запросах типа /i2cgo?adr=20&set=FF.
Ну дык изложите свою идею реализации )
Использовать i2c - это самое простое. Да и в любом случае управлять ардуино придется гет запросами...
Ну дык изложите свою идею реализации )
Использовать i2c - это самое простое. Да и в любом случае управлять ардуино придется гет запросами...
Например, сливать все сообщение из GET запроса в RX\TX.
Запрос мог бы выглядить так: /uart?message=light:on
Arduino слушает Serial порт, к которому подключен ESP модуль и обрабатывает подобные сообщения.
Еще можно сделать, чтобы с arduino можно было отправить в serial ссылку. А ESP модуль сам отправил на нее запрос и вернул бы ответ обратно в serial.
Все уже изобретено.
Двумя постами выше выкладывал скетч и ссылки на библиотеку без эзернет-шилда.
А если в мдуль загрузить вот эту прошивку: http://homes-smart.ru/index.php/oborudovanie/bez-provodov-wi-fi/62-besprovodnoj-datchik-na-baze-esp8266-dlya-servisa-narodmon-ru, так и Ардуина совсем не нужна.
Спасибо, не обратил внимания на скетч, как раз на версии от студентпрогер у меня и собрано павда с изменениями, а самого ESP8266 пока не хватает на все мои хотелки сразу, а именно мне нужна связь с удаленным модулем 433 ООК ну еще LCD, но модуль ESP8266 вещица крайне полезная, и буду изучать.
Все уже изобретено.
Двумя постами выше выкладывал скетч и ссылки на библиотеку без эзернет-шилда.
А если в мдуль загрузить вот эту прошивку: http://homes-smart.ru/index.php/oborudovanie/bez-provodov-wi-fi/62-besprovodnoj-datchik-na-baze-esp8266-dlya-servisa-narodmon-ru, так и Ардуина совсем не нужна.
Похоже что я хожу по тем же граблям что и вы тут: http://esp8266.ru/forum/threads/arduino-biblioteki-esp8266.1/page-2#post... по этой ссылке на скорее всего ваш пост, отсылка данных на народмон работает только один раз, использую SS_serial для обмена с ESP8266.
Ваш же скетч несколькими постами выше где HW serial у меня вовсе не запустился, что там сказано о буфере HW serial? Я менял размер буфера в HardwareSerial.cpp
1
#if (RAMEND < 1000)
2
#define SERIAL_BUFFER_SIZE 256//old 16
3
#else
4
#define SERIAL_BUFFER_SIZE 256//old64
5
#endif
не помогло, если в SS_serial увеличить тоже не помогает. Или не там менять надо? Arduino IDE 1.0.6
Помогите разобраться.
Помогите разобраться.
Да, дествительно - это мои эксперементы. Мы с разработчиком обертки все это попробовали.
Вывод один. Нехватка памяти при работе двух портов (программного и аппаратного) одновременно.
На поддержку программного порта похоже уходят все рессурсы.
Скетч, выложенный в этой ветке, написан без использования программного порта, поэтому он работает стабильно в цикле.
Я задачу разбил на две подзадачи. Вначале отладил с применением монитора формирование пакета данных и отправку на НМ. Затем убрал софтпорт из скетча и уже в темную запустил модуль через аппаратный порт.
У тех Ардуин которые имеют два аппаратных порта, таких проблем не должно быть.
Подскажите ESP07 и ESP12 как то по особенному подключаются?
Подключаю к 3.3В VCC и CH_PD и GND соответсвенно. Мигает синий светодиод на ESP12, на ESP07 еще и красный загорается. В эфире ничего не появляется
Подключаю чере USB-TTL RX и TX на скорости 57400 получаю при рестарте модуля
1
qG.DZ..Q@@HdIw.LQ;kCP@fo.TWZ55FTG!D.c.m
2
HW.PW.
3
q
На других скоростях что то еще более не внятное. AT-команды не проходят
gpio15 на минус еще надо
Подключаю чере USB-TTL RX и TX на скорости 57400 получаю при рестарте модуля
1
qG.DZ..Q@@HdIw.LQ;kCP@fo.TWZ55FTG!D.c.m
2
HW.PW.
3
q
На других скоростях что то еще более не внятное. AT-команды не проходят
Во-во-во, у меня примерно такая же фигня с модулями... Не заводятся. :(
MaksMS, Araris, попробую. Не посоветуете, как это проще организовать?
я тоже не буду читать - копирайт onliner.by
я тоже не буду смотреть - копирайт мой
Питание нормальное дайте модулю...
Увы, иногда не помогает. Схемотехника - откровенное говно, пока ее вылижут хотя бы до состояния ардуины - пройдет много времени: у меня из трех попыток - ни одного раза схема нормально не запустилась: питание от отдельной батареи и от сдвоенного AMC1117 на радиаторе.
Почему у меня все работает? Что я делаю не так?
А мне понравились гребёнки напаянные на StepDown. Класс! И прямо проводки от бредборда втыкать! Сам не догадался, всегда что-то припаивал...
Их же можно ещё и параллелить !!!!!!!!!!!
Во-во-во, у меня примерно такая же фигня с модулями... Не заводятся. :(
Завелась так
GPIO15 на землю
CH_PD к VCC через резистор
Внешнее питание 3.3В
Скорость 9600