• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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

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