#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
ESP8266WebServer server(80);
const char* ssid="yourSSID";
const char* password="yourPASSWORD";
String webSite,javaScript,XML;
unsigned long wait000=0UL,wait001=1000UL;
int LED=16;const int sliderMAX=10; // This sets the number of sliders you wantint sliderVal[sliderMAX]={60},ESPval[sliderMAX];
void buildWebsite(){
buildJavascript();
webSite="<!DOCTYPE HTML>\n";
webSite+="<META name='viewport' content='width=device-width, initial-scale=1'>\n";
webSite+=javaScript;
webSite+="<BODY onload='process()'>\n";
webSite+="
This is the ESP website ...
\n";
webSite+="Runtime = <A ID='runtime'></A>
\n";
webSite+="Сила сигнала a= \n";
webSite+= Sila ;// Сила сигнала WiFi
webSite+="
\n";
webSite+="<TABLE BORDER=1 style='text-align:center;border-collapse:collapse'>\n";
for(int i=0;i<sliderMAX;i++){
webSite+="<TR>\n";
webSite+="<TD>
<INPUT ID='slider"+(String)i+"' TYPE='range' ONCHANGE='Slider("+(String)i+")'></TD>\n"; //in Firefox, Chrome and Edge use ONINPUT
webSite+="<TD>Slidervalue"+(String)i+" = <A ID='Sliderval"+(String)i+"'></A>
\n";
webSite+="ESPval"+(String)i+" = <A ID='ESPval"+(String)i+"'></A> milliseconds</TD>\n";
webSite+="</TR>\n";
}
webSite+="</TABLE>\n";
webSite+="</BODY>\n";
webSite+="</HTML>\n";
}
void buildJavascript(){
javaScript="<SCRIPT>\n";
javaScript+="xmlHttp=createXmlHttpObject();\n";
javaScript+="function createXmlHttpObject(){\n";
javaScript+=" if(window.XMLHttpRequest){\n";
javaScript+=" xmlHttp=new XMLHttpRequest();\n";
javaScript+=" }else{\n";
javaScript+=" xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');\n";
javaScript+=" }\n";
javaScript+=" return xmlHttp;\n";
javaScript+="}\n";
javaScript+="function process(){\n";
javaScript+=" if(xmlHttp.readyState==0||xmlHttp.readyState==4){\n";
javaScript+=" xmlHttp.onreadystatechange=function(){\n";
javaScript+=" if(xmlHttp.readyState==4&&xmlHttp.status==200){\n";
javaScript+=" xmlDoc=xmlHttp.responseXML;\n";
javaScript+=" xmlmsg=xmlDoc.getElementsByTagName('millistime')[0].firstChild.nodeValue;\n";
javaScript+=" document.getElementById('runtime').innerHTML=xmlmsg;\n";
javaScript+=" for(i=0;i<"+(String)sliderMAX+";i++){\n";
javaScript+=" xmlmsg=xmlDoc.getElementsByTagName('sliderval'+i)[0].firstChild.nodeValue;\n";
javaScript+=" document.getElementById('slider'+i).value=xmlmsg;\n";
javaScript+=" document.getElementById('Sliderval'+i).innerHTML=xmlmsg;\n";
javaScript+=" xmlmsg=xmlDoc.getElementsByTagName('ESPval'+i)[0].firstChild.nodeValue;\n";
javaScript+=" document.getElementById('ESPval'+i).innerHTML=xmlmsg;\n";
javaScript+=" }\n";
javaScript+=" }\n";
javaScript+=" }\n";
javaScript+=" xmlHttp.open('PUT','xml',true);\n";
javaScript+=" xmlHttp.send(null);\n";
javaScript+=" }\n";
javaScript+=" setTimeout('process()',1000);\n";
javaScript+="}\n";
javaScript+="function Slider(cnt){\n";
javaScript+=" sliderVal=document.getElementById('slider'+cnt).value;\n";
javaScript+=" document.getElementById('Sliderval'+cnt).innerHTML=sliderVal;\n";
javaScript+=" document.getElementById('ESPval'+cnt).innerHTML=9*(100-sliderVal)+100;\n";
javaScript+=" if(xmlHttp.readyState==0||xmlHttp.readyState==4){\n";
javaScript+=" xmlHttp.open('PUT','setESPval?cnt='+cnt+'&val='+sliderVal,true);\n";
javaScript+=" xmlHttp.send(null);\n";
javaScript+=" }\n";
javaScript+="}\n";
javaScript+="</SCRIPT>\n";
}
void buildXML(){
Sila = WiFi.RSSI(); // Сила сигнала
XML="<?xml version='1.0'?>";
XML+="<xml>";
XML+="<millistime>";
XML+=millis2time();
XML+="</millistime>";
for(int i=0;i<sliderMAX;i++){
XML+="<sliderval"+(String)i+">";
XML+=String(sliderVal[i]);
XML+="</sliderval"+(String)i+">";
XML+="<ESPval"+(String)i+">";
ESPval[i]=9*(100-sliderVal[i])+100;
XML+=String(ESPval[i]);
XML+="</ESPval"+(String)i+">";
}
XML+="</xml>";
}
String millis2time(){
String Time="";
unsigned long ss;
byte mm,hh;
ss=millis()/1000;
hh=ss/3600;
mm=(ss-hh*3600)/60;
ss=(ss-hh*3600)-mm*60;
if(hh<10)Time+="0";
Time+=(String)hh+":";
if(mm<10)Time+="0";
Time+=(String)mm+":";
if(ss<10)Time+="0";
Time+=(String)ss;
return Time;
}
void handleWebsite(){
buildWebsite();
server.send(200,"text/html",webSite);
}
void handleXML(){
buildXML();
server.send(200,"text/xml",XML);
}
void handleESPval(){
int sliderCNT=server.arg("cnt").toInt();
sliderVal[sliderCNT]=server.arg("val").toInt();
buildXML();
server.send(200,"text/xml",XML);
}
void setup() {
Serial.begin(115200);
pinMode(LED13,OUTPUT);
pinMode(LED14,OUTPUT);
pinMode(LED15,OUTPUT);
WiFi.begin(ssid,password);
while(WiFi.status()!=WL_CONNECTED)delay(500);
WiFi.mode(WIFI_STA);
Sila = WiFi.RSSI();
Serial.println("\n\nBOOTING ESP8266 ...");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("Station IP address: ");
Serial.println(WiFi.localIP());
server.on("/",handleWebsite);
server.on("/xml",handleXML);
server.on("/setESPval",handleESPval);
server.begin();
// HTTP_begin();
}
void loop() {
server.handleClient();
if(millis()>wait000){
buildXML();
wait000=millis()+1000UL;
}
if(millis()>wait001){
digitalWrite(LED13,!digitalRead(LED13));
wait001=millis()+ESPval[0];
Serial.print(" Sl3 ");
Serial.print(ESPval[0]);
analogWrite(LED13, ESPval[0]);
Serial.print(" Sl4 ");
Serial.print(ESPval[1]);
analogWrite(LED14, ESPval[1]);
Serial.print(" Sl5 ");
Serial.println(ESPval[2]);
analogWrite(LED15, ESPval[2]);
Serial.print(WiFi.RSSI()); // Сила сигнала
// WiFi.printDiag(Serial);
}
}
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
ESP8266WebServer server(80);
const char* ssid="ABPOPA"; //название точки доступа
const char* password=""; // пароль не будем писать
//const char* ssid="HomeIoT"; // здесь пишем название домашней точки доступа
//const char* password="DDV987654321"; // и пароль
String webSite,javaScript,XML;
unsigned long wait000=0UL,wait001=1000UL;
int OUT1=14, OUT2=12, BAT=17;//Назначение выводов
int Sila, SilaLow = -43; // Контроль силы сигнала WiFi
int Batareya, BatLow = 400; //Контроль напряжения батареи
float Povorot = 0.8, Trimer; // Переменные для значений поворота и тримера двигателя
String Bat, SilaW;
const int sliderMAX=3; // This sets the number of sliders you want
int sliderVal[3]={100, 50, 50}; //Начальные значения 1 слайдера - скорость, 2-го - поворот, 3- тример
int ESPval[sliderMAX];
void Batare(){
Batareya = analogRead(BAT); // Меряем напряжение батареи
if (Batareya < BatLow){ // Если напряжение батареи меньше порогового значения
Bat = " Батарея села, ПОРА на ЗАРЯДКУ"; // Пишем предупреждение
}
else{ // Если норма
Bat = ""; // Ничего не пишем
}
}
void SilaWifi(){
Sila = WiFi.RSSI(); // Меряем силу сигнала WiFi
if (Sila < SilaLow){
SilaW = " Сигнал слабый, РАЗВОРАЧИВАЙ";
}
else{
SilaW = "";
}
}
void buildJavascript(){
javaScript="<SCRIPT>\n";
javaScript+="xmlHttp=createXmlHttpObject();\n";
javaScript+="function createXmlHttpObject(){\n";
javaScript+=" if(window.XMLHttpRequest){\n";
javaScript+=" xmlHttp=new XMLHttpRequest();\n";
javaScript+=" }else{\n";
javaScript+=" xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');\n";
javaScript+=" }\n";
javaScript+=" return xmlHttp;\n";
javaScript+="}\n";
javaScript+="function process(){\n";
javaScript+=" if(xmlHttp.readyState==0||xmlHttp.readyState==4){\n";
javaScript+=" xmlHttp.onreadystatechange=function(){\n";
javaScript+=" if(xmlHttp.readyState==4&&xmlHttp.status==200){\n";
javaScript+=" xmlDoc=xmlHttp.responseXML;\n";
javaScript+=" xmlmsg=xmlDoc.getElementsByTagName('millistime')[0].firstChild.nodeValue;\n";
javaScript+=" document.getElementById('runtime').innerHTML=xmlmsg;\n"; // Добавляем наши данные
javaScript+=" xmlmsg=xmlDoc.getElementsByTagName('Sila')[0].firstChild.nodeValue;\n";// Сила сигнала WiFi
javaScript+=" document.getElementById('Sila').innerHTML=xmlmsg;\n"; // Сила сигнала WiFi
javaScript+=" xmlmsg=xmlDoc.getElementsByTagName('Batareya')[0].firstChild.nodeValue;\n";// Напряжение батареи
javaScript+=" document.getElementById('Batareya').innerHTML=xmlmsg;\n"; // Напряжение батареи
javaScript+=" for(i=0;i<"+(String)sliderMAX+";i++){\n";
javaScript+=" xmlmsg=xmlDoc.getElementsByTagName('sliderval'+i)[0].firstChild.nodeValue;\n";
javaScript+=" document.getElementById('slider'+i).value=xmlmsg;\n";
javaScript+=" document.getElementById('Sliderval'+i).innerHTML=xmlmsg;\n";
javaScript+=" xmlmsg=xmlDoc.getElementsByTagName('ESPval'+i)[0].firstChild.nodeValue;\n";
javaScript+=" document.getElementById('ESPval'+i).innerHTML=xmlmsg;\n";
javaScript+=" }\n";
javaScript+=" }\n";
javaScript+=" }\n";
javaScript+=" xmlHttp.open('PUT','xml',true);\n";
javaScript+=" xmlHttp.send(null);\n";
javaScript+=" }\n";
javaScript+=" setTimeout('process()',1000);\n";
javaScript+="}\n";
javaScript+="function Slider(cnt){\n";
javaScript+=" sliderVal=document.getElementById('slider'+cnt).value;\n";
javaScript+=" document.getElementById('Sliderval'+cnt).innerHTML=sliderVal;\n";
javaScript+=" document.getElementById('ESPval'+cnt).innerHTML=9*(100-sliderVal)+100;\n";
javaScript+=" if(xmlHttp.readyState==0||xmlHttp.readyState==4){\n";
javaScript+=" xmlHttp.open('PUT','setESPval?cnt='+cnt+'&val='+sliderVal,true);\n";
javaScript+=" xmlHttp.send(null);\n";
javaScript+=" }\n";
javaScript+="}\n";
javaScript+="</SCRIPT>\n";
}
void buildWebsite(){ // Создаём страницу с элементами управления
buildJavascript();
webSite="<!DOCTYPE HTML>\n";
webSite+="<META name='viewport' content='width=device-width, initial-scale=1', charset=\"utf-8\">\n";
webSite+=javaScript;
webSite+="<BODY onload='process()'>\n";
webSite+="
Кораблик
\n";
webSite+="Время работы = <A ID='runtime'></A>
\n";
webSite+="Сила сигнала <A ID='Sila'></A>
\n"; // Сила сигнала WiFi
webSite+="Напряжение батареи <A ID='Batareya'></A>
\n"; // Напряжение батареи
webSite+="<TABLE BORDER=1 width='700' height='200' style='text-align:center;border-collapse:collapse'>\n";
// webSite+="<INPUT ' TYPE='range' width='600'> \n"; // это пример слайдера
webSite+="<TR>\n"; // 1 слайдер
webSite+="<TD>
<INPUT ID='slider"+(String)0+"' TYPE='range' ONCHANGE='Slider("+(String)0+")'></TD>\n";
webSite+="<TD>Обороты = <A ID='Sliderval"+(String)0+"'></A>
\n";
webSite+="Моторов = <A ID='ESPval"+(String)0+"'></A> * </TD>\n";
webSite+="</TR>\n";
webSite+="<TR>\n"; // 2 слайдер
webSite+="<TD>
<INPUT ID='slider"+(String)1+"' TYPE='range' ONCHANGE='Slider("+(String)1+")'></TD>\n";
webSite+="<TD>Направление = <A ID='Sliderval"+(String)1+"'></A>
\n";
webSite+="Движения = <A ID='ESPval"+(String)1+"'></A></TD>\n";
webSite+="</TR>\n";
webSite+="<TR>\n"; // 3 слайдер
webSite+="<TD>
<INPUT ID='slider"+(String)2+"' TYPE='range' ONCHANGE='Slider("+(String)2+")'></TD>\n";
webSite+="<TD>Корекция = <A ID='Sliderval"+(String)2+"'></A>
\n";
webSite+="Моторов = <A ID='ESPval"+(String)2+"'></A></TD>\n";
webSite+="</TR>\n";
webSite+="</TABLE>\n";
webSite+="</BODY>\n";
webSite+="</HTML>\n";
}
String millis2time(){ // преобразование милисекунд в вид ч/м/с
String Time="";
unsigned long ss;
byte mm,hh;
ss=millis()/1000;
hh=ss/3600;
mm=(ss-hh*3600)/60;
ss=(ss-hh*3600)-mm*60;
if(hh<10)Time+="0";
Time+=(String)hh+":";
if(mm<10)Time+="0";
Time+=(String)mm+":";
if(ss<10)Time+="0";
Time+=(String)ss;
return Time;
}
void buildXML(){
XML="<?xml version='1.0'?>";
XML+="<xml>";
XML+="<millistime>";
XML+=millis2time();
XML+="</millistime>"; // Добавляем наши данные
SilaWifi(); // Здесь измеряем силу сигнала
XML+="<Sila>"; // Сила сигнала WiFi
XML+=String(Sila)+SilaW;// Сила сигнала WiFi
XML+="</Sila>"; // Сила сигнала WiFi
Batare(); // Здесь измеряем напряжение батареи
XML+="<Batareya>"; // Напряжение батареи
XML+=String(Batareya)+Bat;// Напряжение батареи
XML+="</Batareya>"; // Напряжение батареи
for(int i=0;i<sliderMAX;i++){
XML+="<sliderval"+(String)i+">";
XML+=String(sliderVal[i]);
XML+="</sliderval"+(String)i+">";
XML+="<ESPval"+(String)i+">";
ESPval[i]=9*(100-sliderVal[i])+100;
XML+=String(ESPval[i]);
XML+="</ESPval"+(String)i+">";
}
XML+="</xml>";
}
void handleWebsite(){
buildWebsite();
server.send(200,"text/html",webSite);
}
void handleXML(){
buildXML();
server.send(200,"text/xml",XML);
}
void handleESPval(){
int sliderCNT=server.arg("cnt").toInt();
sliderVal[sliderCNT]=server.arg("val").toInt();
buildXML();
server.send(200,"text/xml",XML);
}
void setup() {
Serial.begin(115200);
pinMode(OUT1,OUTPUT);
pinMode(OUT2,OUTPUT);
pinMode(BAT,INPUT);
WiFi.softAP(ssid, password); // Создаём точку доступа
// WiFi.begin(ssid,password); //Это вариант для подключения к существующей точке
// while(WiFi.status()!=WL_CONNECTED)delay(500);
// WiFi.mode(WIFI_STA);
Serial.println("\n\nBOOTING ESP8266 ...");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("Station IP address: ");
Serial.println(WiFi.localIP()); // Вывод в монитор порта присвоенный IP
server.on("/",handleWebsite);
server.on("/xml",handleXML);
server.on("/setESPval",handleESPval);
server.begin();
}
void loop() {
server.handleClient();
if(millis()>wait000){
buildXML();
wait000=millis()+1000UL;
}
if(millis()>wait001){
wait001=millis()+300; //Обновляем значения раз в 300 милисекунд
Trimer = (ESPval[2]*.0015);
Serial.print(" Skorost] ");
Serial.print(ESPval[0]);
Serial.print(" Povorot ");
Serial.print(ESPval[1]);
Serial.print(" Trimer ");
Serial.print(ESPval[2]);
Serial.print(Trimer);
if (ESPval[0] > 200){ // Если слайдер скорости > 200
if ( ESPval[1] > 600) { // Если слайдер поворота > 600 то поворачиваем на лево
analogWrite(OUT1, ESPval[0]);
analogWrite(OUT2, int(ESPval[0] * Povorot*Trimer));
Serial.print(" Le ");
Serial.print(ESPval[0] * Povorot*Trimer);
}
else if (400 > ESPval[1] ){ // Если слайдер поворота < 400 то поворачиваем на право
analogWrite(OUT1, int(ESPval[0] * Povorot));
analogWrite(OUT2, int(ESPval[0]*Trimer));
Serial.print(" Pr ");
Serial.print(int(ESPval[0] * Povorot));
}
else { // Если слайдер поворота > 400 и < 600то едем прямо
analogWrite(OUT1, ESPval[0]);
analogWrite(OUT2, int(ESPval[0]*Trimer));
Serial.print(" OK ");
}
}
else { // Если слайдер скорости < 200 - выключить моторы
analogWrite(OUT1, 0);
analogWrite(OUT2, 0);
Serial.print(" Stop ");
}
Serial.print(" Batareya ");
Serial.println(Batareya);
}
}
+17 |
3631
102
|
Сразу почему-то вспомнились кружки моделистов в доме пионеров, там тоже стояли корпуса из пенопласта и гребные валы из банки нескафе)
И система видео наблюдения как устроена на компе или отдельной железякой?
Видео наблюдение строил на отдельном 16 канальном регистраторе.
Из куска дерева-прямоугольный брусок с острым носом.Резиномотор и такие же гребные винты из гнутой жести.А возвратом по ЖПиС служил изогнутый жестяной руль, который и заворачивал лодку на середине фонтана обратно.
Цепочку таких плавающих по Волге точек доступа штук 20 и интернет по WiFi до дачи доберётся. :)
выставка только что закрылась в Киеве, была там мопедка.
Дифсита в СССР НЕ было.Идёшь к знакомому еврею из торговли(главбух, завсклад, завмаг, старший продавец), переплачиваешь сверху и имеешь что хочешь.
Был дефицит денег-все хорошие ВЕЩИ в СССР стоили ОЧЕНЬ дорого.
А дифсит делали искусственно заинтересованные лица определённой национальности сидящие в торговле и министерствах.
В 70, начале 80 телевизорами были забиты ВСЕ магазины.
Вот только стоили они 8-10 зарплат.Оооочень дорого.
В конце 80 дефицит ЦТВ был СДЕЛАН искусственно.
Лично видел склады забитые ЦТВ на десятки метров вверх и на километры в длину.Когда на полках было пусто.
В 90г -91г Львовский завод произвёл более 3 миллионов ЦТВ ни один из них не поступил в продажу, людям не заплатили за работу.
Зато как только объявили незалежность все полки оказались забиты товарами, НО за новую валюту-купоны.
Продажная торговля многие годы готовилась к перевороту и свержению народной власти.Создавали озлобленность быдла пустыми полками.
Ещё помню партийные бонзы жировали, во дворе у парня папа был шишкой в местном горкоме КПСС и мама тоже заведовала одним большим объектом в городе, помню эту мразь толстую, его папу, как он жигули новой модели как перчатки менял, когда как простому работяге надо было лет 5-10 на неё горбатиться и как он ящики с заморским провиантом постоянно с багажника вытаскивал, где-то по блату затаривался, в то время когда в магазине было шаром покати, время прошло, те же партийные крысы у власти, только название страны поменялось.
Это была моя несбыточная мечта, и я, идя со школы домой, частенько заходил полюбоваться на него. Просить родителей купить даже не было мысли за такие деньги.
Он же был изначально на р/у? Это было большой редкостью для советских игрушек.
хорошо запомнилось что в выходных каскадах еще стояли германиевые транзисторы
работала она на адском количестве батареек и пульт был в виде рулевого колеса
Спасибо! Мы пошли…
жопстводелие! Делал тоже по детству кораблик. Советский мотор-винт был в наличии. Мотор-винт-выключатель-батарейка на 4,5 Вольта, и немного криво вклееный винт в пенопласт — чтобы кораблик гонял по кругу, и его можно было изловить. Ардуин тогда не было, как и сотовых аппаратов. Ну и при приклейке палубы к корпусу пенопласт сожрало — тогда клей «Момент» был на толуоле. Как и при покраске днища ацетоно-содержащим лаком. Но лётал кораблик шустро! Хрен поймаешь с первого раза.И Вам бы использовать лучше что-то типа Пеноплекса-утеплителя. Он не такой пористый.
Только тогда просто брали и делали, не глядя на внешний вид, главное — что бы работало.
Плюсую.
Вот сделали быстро такую страшную на вид, о работающую штуку — и для детей много это интересней, чем если бы их папа пару месяцев вылизывал корпус, как на выставку.
А дальше, после первого результата, и именно быстро полученного — можно это дело окультурить — но именно когда интерес появился.
Или следующую задумку делать — только уже можно подольше, не макет, а именно модель…
Ну, а можно и жигули клепать, это уж кому что дано…
Помню, как собирал мультивибратор на проводах, усилитель — на картонке.
С тех пор у меня несколько изменился подход к разработке и исполнению.
… а еще у меня в первом классе была пятерка по рисованию.
Рисую я сейчас точно так же — но пятерки мне за это почему то не ставят…
Хотя лично мне, вдобавок к «фринзингу» явно и остро не хватает принципиальной схемы. Вы уж хоть от руки нарисуйте, а?
Неужели был обзор кота??? :)
P/S. это кошка
mySKU.me/blog/china-stores/37597.html Обучаемый пульт Chunghop
mySKU.me/blog/aliexpress/40354.html 4портовый usb3.0 hub с выключателями портов
mySKU.me/blog/aliexpress/35492.html Набор для сборки паяльной станции на жалах Hakko T12.
mySKU.me/blog/china-stores/33286.html 24 Вольта 100 Ватт блок питания с неплохим результатом
mySKU.me/blog/china-stores/33405.html DC-DC преобразователь, как это иногда бывает.
mySKU.me/blog/china-stores/40662.html Миниатюрный многофункциональный измеритель для всяких поделок
mySKU.me/blog/aliexpress/24145.html Недорогой и удобный DC-DC преобразователь.
mySKU.me/blog/aliexpress/41082.html Мобильный роутер NEXX WT3020H
ещё так и не смог найти, скроллинг у мышки устал, одноканальный RF димер/выключатель подсветки 12 В
Кстати, у меня тоже проблема сопряжения ESP с Majordomo — по отдельности всё работает.
P.S. WiFi — это до 100 метров, рогатка или двухметровая «ложка» не проще ли будут?
youtu.be/HsG7ND4z6IU
Аппаратура радиоуправления куплена в Китае за ~30$. А вот поворотом ракетной установки и выстрелами управляет ардуинка.
aliexpress.com/item/Sonoff-Remote-Wireless-Smart-Switch-Smart-Home-automation-Intelligent-WiFi-Center-for-APP-Smart-Home-Controls/32727826540.html
Но по вышеприведённой схеме и коду можно сделать более сложное управление, под конкретную задачу, будь то управление группами ламп, или три скорости вентилятора.
По функционалу выбор очень большой, диву даешься, что «все уже придумано до нас». Опять же, самоделка все-равно упираеся в сбор из готового (можно купить отладку ESP8266-12, а можно развести, вытравить и спаять; терморезак можно купить, а клеевый пистолет сделать).
Но сделанное руками всегда интереснее, необычнее и веселее. :)
И два канала реле, и гребенка где можно остальные пины ESP8266 взять, и готовая разводка/место под пайку DHT22…
Только что-то она подорожала после апгрейда релюшек…
Раньше, когда релюшки Songle стояли (такие как на фотках) вроде 6$ за штуку было.
В следующий раз исправлюсь.)
Скаченные с торрентов серии часто имеют в начале 30-40 сек. рекламы от спонсора релизера, хочется перед заливкой на флешку для телевизора весь этот мусор обрезать…
Это обвязка нужная для стабильной работы голого esp.
При том, что в ней ни usb<>uart конвертера, ни стабилизатора на требуемые 3.3v.
Для освоения и разработки в разы удобней использовать вот такой модуль:
aliexpress.com/item/New-Wireless-module-CH340-NodeMcu-V3-Lua-WIFI-Internet-of-Things-development-board-based-ESP8266-We/32565317233.html
usb<>uart у меня есть, на нём же есть 3.3v, только для боевых условий надо бы преобразователь на 5v > 3.3v
и как я не додумался (а вроде рукастый) сделать винты из жести наверное остатки пластиковых винтов сузили кругозор :(
а как можно на базе этой платы реализовать управление сервой, чтобы угол поворота головки сервы соответствовал углу поворота потенциометра от 0 до 270?
(тобишь управлять обычным потенциометром и передавать координаты его «открытия» )
или для этого можно и без ардуины обойтись?
На вход ADC подавать напряжение с потенциометра и в соответствии с ним крутить серву.
Гугл на запрос «esp8266 сервопривод» 3-й сторокой выдаёт ролик Ютуб — Cервопривод SG90 управление с ESP 8266 по WI-FI, c помощью…
Для себя хочу сделать катамаран и увеличить водоизмещение для будущих проектов.
Огромный простор для фантазии)))
как предложение для доработки — добавить задний ход, и может быть сделать в ПО(только что в голову пришло пока писал) включение заднего хода, если сигнал пропал в процессе плаванья, например: далеко уплыл кораблик.
Вот если GPS на борту будет и будет известна точка старта… Но это уже несколько другой уровень погружения в корабликостроительство. )))
Да, GPS это отдельная песня…
Просто надо перенос строки убрать.
Скомпилировал на ардуино 1.8.1 Библиотеки обновлены.
image.prntscr.com/image/a8aa4916bde947bb949e5989e6ceb670.png