• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Передача данных с Android на ESP8266

Alex_56

New member
Здравствуйте!
Задача стоит следующая:
Есть Arduino UNO + модуль ESP8266.
Хочу написать программку на Android, что бы с помощью сокета отправляла данные на эту конструкцию.
Вопрос: как настроить ESP8266 и как принимать данные на стороне Arduino + ESP8266?
 

086dx66

Member
И что мешает тебе это сделать?
Что уже сделал или кроме поста ничего
 

Alex_56

New member
кроме поста ничего, просто решил сначала разобраться в особенностях работы с ESP8266. Получается его нужно как TCP сервер настраивать, а потом ждать входящих данных? как это сделать?
 

086dx66

Member
кроме поста ничего, просто решил сначала разобраться в особенностях работы с ESP8266. Получается его нужно как TCP сервер настраивать, а потом ждать входящих данных? как это сделать?
Как вариант
Смотри примеры которые идут в комплекте webserver типа того
 

Alex_56

New member
Как вариант
Смотри примеры которые идут в комплекте webserver типа того
Примеры которые в библиотечных скетчах? я просто только начал с Arduino работать, почитал про этот модуль, не особо понял с чего начать то? там прошивать его как то нужно.
 

086dx66

Member
Тогда лучше начни с чего то попроще ;)
В примерах информации достаточно
Начни уже делать хоть что-то ;)
Смотри пример вебсервер
Можно тупо работать по rx/tx с уно
Если тебе так проще
 

Alex_56

New member
Тогда лучше начни с чего то попроще ;)
В примерах информации достаточно
Начни уже делать хоть что-то ;)
Смотри пример вебсервер
Можно тупо работать по rx/tx с уно
Если тебе так проще
Если он будет работать в качестве вэб-сервера, там гет - запросами к нему обращаться?
 

Shrotnet

New member
подними на ардуине веб сервер, заходи извне на свою айпишку и порт, и ручками вбивай данные. И вообще, какие данные с Андроида - ты фантазируешь передавать на Ардуину ???
 

Arthur

Active member
Как вариант - поднять на самой ESP сервер. Например, UDP. И слать/принимать с него данные...
 

maks100

New member
Решил данный вопрос так (хотя не полностью). В Есп залил прошивку с поддержкой Ат команд, А на уно скетч который подымает ат командами сервер.
HardwareSerial & ESPport = Serial;

const int ledPin = 13;
const int ledPin12 = 12;
const int ledPin9 = 9;
const int ledPin3 = 3;
const int ledPin5 = 5;
const int ledPin6 = 6;
int ledState = HIGH;
int ledStatett = HIGH;
int ledState12 = HIGH;
int ledState9 = HIGH;
int ledState3 = HIGH;
int ledState5 = HIGH;
int ledState6 = HIGH;
#define BUFFER_SIZE 128
char buffer[BUFFER_SIZE];
String vklotkl;
String vklotkl12;
String vklotkl9;
int temp = 22; // переменная, которой будет присваиваться значения например с датчика температуры

void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(ledPin12, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(ledPin3, OUTPUT);
ESPport.begin(115200); // ESP8266
clearSerialBuffer();
GetResponse("AT+RST",3400); // перезагрузка ESP
Serial.println(GetResponse("AT+CIOWRITE=0,1",3400)); // перезагрузка ESP
GetResponse("AT+CWMODE=2",300); // режим клиента
GetResponse("AT+RST",3400); // перезагрузка ESP
GetResponse("AT+CSYSWDTENABLE",300); // сторож
GetResponse("AT+CWSAP=\"seto44ka\",\"12345678\",9,4",7000);
//connectWiFi("seto4ka","hujtebeaneinet00"); // подключаемся к домашнему роутеру (имя точки, пароль)
GetResponse("AT+CIPMODE=0",300); // сквозной режим передачи данных.
GetResponse("AT+CIPMUX=1",300); // multiple connection.
GetResponse("AT+CIPSERVER=1,88", 300); // запускаем ТСР-сервер на 88-ом порту
GetResponse("AT+CIPSTO=3", 300); // таймаут сервера 3 сек
GetResponse("AT+CIFSR", 300); // узнаём адрес
digitalWrite(ledPin,ledState);
digitalWrite(ledPin12,ledState12);
digitalWrite(ledPin9,ledState9);
analogWrite(ledPin3,ledState3);
analogWrite(ledPin5,ledState5);
analogWrite(ledPin6,ledState6);
}
///////////////////основной цикл, принимает запрос от клиента///////////////////
void loop()
{
temp++;
int ch_id, packet_len;
char *pb;
ESPport.readBytesUntil('\n', buffer, BUFFER_SIZE);
if(strncmp(buffer, "+IPD,", 5)==0)
{
sscanf(buffer+5, "%d,%d", &ch_id, &packet_len);
if (packet_len > 0)
{
pb = buffer+5;
while(*pb!=':') pb++;
pb++;

if(strncmp(pb, "GET / ", 6) == 0)
{
clearSerialBuffer();
otvet_klienty(ch_id);
}

//D13
if(strncmp(pb, "GET /a", 6) == 0)
{
clearSerialBuffer();

if(ledState == LOW)
{
ledState = HIGH;
vklotkl = "VKL";
}

else
{
ledState = LOW;
vklotkl = "OTKL";
}

digitalWrite(ledPin, ledState);
otvet_klienty(ch_id);
}
//Dopizdy
if(strncmp(pb, "GET /j", 6) == 0)
{
clearSerialBuffer();
ledState3=temp%255;
ledState5=temp%155;
ledState6=temp%60;

analogWrite(ledPin3,ledState3);
analogWrite(ledPin5,ledState5);
analogWrite(ledPin6,ledState6);


digitalWrite(ledPin, ledState);
otvet_klienty(ch_id);
}

//moja
if(strncmp(pb, "GET /t", 6) == 0)
{
clearSerialBuffer();

if(ledStatett == LOW)
{
ledStatett = HIGH;
GetResponse("AT+CIOWRITE=0,0",3400);
}

else
{
ledStatett = LOW;
GetResponse("AT+CIOWRITE=0,1",3400);
}

digitalWrite(ledPin, ledState);
otvet_klienty(ch_id);
}
//D12
if(strncmp(pb, "GET /b", 6) == 0)
{
clearSerialBuffer();

if(ledState12 == LOW)
{
ledState12 = HIGH;
vklotkl12 = "VKL";
}

else
{
ledState12 = LOW;
vklotkl12 = "OTKL";
}

digitalWrite(ledPin12, ledState12);
otvet_klienty(ch_id);
}
//D9
if(strncmp(pb, "GET /c", 6) == 0)
{
clearSerialBuffer();

if(ledState9 == LOW)
{
ledState9 = HIGH;
vklotkl9 = "VKL";
}

else
{
ledState9 = LOW;
vklotkl9 = "OTKL";
}

digitalWrite(ledPin9, ledState9);
otvet_klienty(ch_id);
}

}
}
clearBuffer();
}
//////////////////////формирование ответа клиенту////////////////////
void otvet_klienty(int ch_id)
{
String Header;

Header = "HTTP/1.1 200 OK\r\n";
Header += "Content-Type: text/html\r\n";
Header += "Connection: close\r\n";
String Content;
Content = "<html><body>";
Content += "<form action='a' method='GET'>D13 <input type='submit' value='VKL/OTKL'> " + vklotkl + "</form>";
Content += "<form action='b' method='GET'>D12 <input type='submit' value='VKL/OTKL'> " + vklotkl12 + "</form>";
Content += "<form action='c' method='GET'>D9 <input type='submit' value='VKL/OTKL'> " + vklotkl9 + "</form>";
Content += "<br />Temp: " + String(temp) + " C";
Content += "</body></html>";
Header += "Content-Length: ";
Header += (int)(Content.length());
Header += "\r\n\r\n";
ESPport.print("AT+CIPSEND="); // ответ клиенту
ESPport.print(ch_id);
ESPport.print(",");
ESPport.println(Header.length()+Content.length());
delay(20);

if(ESPport.find(">"))
{
ESPport.print(Header);
ESPport.print(Content);
delay(200);
}
}
/////////////////////отправка АТ-команд/////////////////////
String GetResponse(String AT_Command, int wait)
{
String tmpData;
ESPport.println(AT_Command);
delay(wait);
while (ESPport.available() >0 )
{
char c = ESPport.read();
tmpData += c;

if ( tmpData.indexOf(AT_Command) > -1 )
tmpData = "";
else
tmpData.trim();

}
return tmpData;
}
//////////////////////очистка ESPport////////////////////
void clearSerialBuffer(void)
{
while ( ESPport.available() > 0 )
{
ESPport.read();
}
}
////////////////////очистка буфера////////////////////////
void clearBuffer(void) {
for (int i =0;i<BUFFER_SIZE;i++ )
{
buffer=0;
}
}
////////////////////подключение к wifi/////////////////////
boolean connectWiFi(String NetworkSSID,String NetworkPASS)
{
String cmd = "AT+CWJAP=\"";
cmd += NetworkSSID;
cmd += "\",\"";
cmd += NetworkPASS;
cmd += "\"";
ESPport.println(cmd);
delay(6500);
}

теперь для управления достаточно послать запрос 192.168.4.1:88/komanda
где komanda это запрограмированый в скетче символ под определенное
if(strncmp(pb, "GET /t", 6) == 0)
{
clearSerialBuffer();

if(ledStatett == LOW)
{
ledStatett = HIGH;
GetResponse("AT+CIOWRITE=0,0",3400);
}

else
{
ledStatett = LOW;
GetResponse("AT+CIOWRITE=0,1",3400);
}

digitalWrite(ledPin, ledState);
otvet_klienty(ch_id);
}
Что по поводу андроида то теперь надо чтоб он отправлял (это поидее штмль запрос нет??).
теперь сижу думаю над таким приложением чтоб запросы были привязяны к кнопочкам, бо каждый раз через браузер не удобно.
 

Shrotnet

New member
по теме сокетов - ничего нет в интернете !!! это строго засекреченные коммерческие темы. Так что можно расслабиться, и юзать BLYNK. ха-ха-ха
 

Arthur

Active member
Да и вообще в Интернете ничего нет, что было бы разжёвано, положенно в рот и проглоченно - во всём приходится самому разбираться :(...
А если человек сам не хочет разбираться, то ему сразу платные услуги предлагают :(.
Не могут, вот, взять и всё сами за человека сделать, да ещё и вложить ему в мозги знания. :(
Сразу видно, что эти самые интернеты капиталистические шушеры создавали, никакого социализма :)...
 

Shrotnet

New member
в 2000 году можно было найти схемы, советы, тайны прошивки сотовых телефонов. А сегодня ничего в свободном доступе нет. Найди некоторые схемы ноутбуков ? найди советы по ремонту. Все сидят и мечтают срубать тот ДОЛЛАР !!! скажи что нет ????
 

Arthur

Active member
Точно!
Даёшь подвальчики-ремонтные мастерские на каждом шагу!
Ударим ремонтом по капитализму, разгильдяйству и бюрократизму!
 
Последнее редактирование:

Arthur

Active member
А, хотя, зачем что-то ремонтировать! Нужно наращивать доходы и за счёт них наращивать потребление!
Прям в тему только что прочёл chill out post - Почему в наши дни все так быстро ломается - BBC Русская служба .
Всё равно некоторые вещи не починишь, особенно китайские :). Их смысла нет чинить, искать под них схемы и прошивки - проще купить новые!
В мире сейчас век потребляйства - лежа на диване потреблять можно, а ещё проще - Маниловым прикидываться, про какой ремонт Вы-таки говорите? :)
Один фиг никому не продашь сейчас поделку свою, если не наладил производство в Китае :). А под это деньги нужны, и немалые.
 
Последнее редактирование:

ardu

New member
теперь для управления достаточно послать запрос 192.168.4.1:88/komanda

Что по поводу андроида то теперь надо чтоб он отправлял (это поидее штмль запрос нет??).
теперь сижу думаю над таким приложением чтоб запросы были привязяны к кнопочкам, бо каждый раз через браузер не удобно.
Зачем городить программу, можно в браузере на андроиде/айфоне вручную открыть запрос, затем нажать меню и добавить ссылку на рабочий стол. Если много значков получится - можно сгруппировать на рабочем столе в папку. И никакая программа не понадобится
 
Сверху Снизу