Witam. Pracuje nad projektem do którego potrzebuje nawiązać połączenie między modułem wifi esp8266 a apką w kivy(python) napisaną na telefon. Problem w tym ze nie wiem jak się połączyć. Robił już ktoś cos takiego i moze wie jak mi pomóc? Client server? Json? Urlrequest? Komunikacja musi byc zapewniona w obydwie strony
Blynk ? Virtuino ? Po co wyważać otwarte drzwi jak są gotowe, darmowe i bardzo dobre rozwiązania ?
Zależy co umiesz zrobić na telefon w pytonie, na esp możesz postawić sobie serwer telnet, UDP, websockets i jak sobie wymyślisz coś innego sensownego to pewnie już jest do tego przykład. Do wszystkiego znajdziesz przykłady w google. Na początek przejrzyj już wbudowane przykłady.
#include <SoftwareSerial.h>
const byte rxPin = 2; // Wire this to Tx Pin of ESP8266
const byte txPin = 3; // Wire this to Rx Pin of ESP8266
// We'll use a software serial interface to connect to ESP8266
SoftwareSerial esp(rxPin, txPin);
void setup() {
Serial.begin(9600);
esp.begin(9600); // Change this to the baudrate used by ESP8266
delay(1000); // Let the module self-initialize
}
void loop() {
Serial.println("Sending an AT command...");
esp.println("AT");
delay(30);
while (esp.available()){
String inData = esp.readStringUntil('\n');
Serial.println("Got reponse from ESP8266: " + inData);
}
}
ESP ARDUINO
GND GND
CH_PD 3v3
VCC 3v3
RX 3
TX 2
Takim połączeniem dostaje odpowiedź OK ze moduł esp8266 jest widoczny.
Z kolei takim połączeniem uzyskałem komunikacje client-server z aplikacja na laptopie.
Esp8266 | Arduino
-----------------
RX | RX
TX | TX
GND | GND
VCC | 5v
CH_PD | 5v
GPIO 0 | None
GPIO 2 | None
Arduino | Arduino
-----------------
Reset | GND
#include "ESP8266WiFi.h"
const char* ssid = "yourNetworkName";
const char* password = "yourNetworkPass";
WiFiServer wifiServer(80);
void setup() {
Serial.begin(115200);
delay(1000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting..");
}
Serial.print("Connected to WiFi. IP:");
Serial.println(WiFi.localIP());
wifiServer.begin();
}
void loop() {
WiFiClient client = wifiServer.available();
if (client) {
while (client.connected()) {
while (client.available()>0) {
char c = client.read();
Serial.write©;
}
delay(10);
}
client.stop();
Serial.println("Client disconnected");
}
}
Wykorzystujac ten kod.
Teraz problem w tym że mam kilka czujników wilgotnosci i temperatury z których chce odczytywać dane poprzez arudino i potem wysyłać je dalej esp8266 do clienta ktory się podłączy do servera postawionego na tym esp8266.
Problem w tym ze nie wiem jak to wykonać. Próbowałem paru rzeczy ale nie działa.
Wpisz w google choćby "esp8266 server wether station" i pyk:
https://www.youtube.com/watch?v=6LjbTgX046w, a takich jest tysiące.
Tu jest przykład z websockets:
https://github.com/kaczakat/ESP8266, wgrywasz to do ESP8266.
Jak musisz mieć Arduino (jakieś UNO/NANO) to wysyłasz dane do ESP przez serial, a z ESP dalej do klienta. Jak ESP8266 ma za mało pinów to można użyć ESP32, Atmega328 w roli serwera (2kb RAM/32kb flash), a ESP8266 tylko jako jej modem (80kb RAM/1MB flash) to trochę głupi pomysł. Po zainstalowaniu definicji ESP, tak by programować go jak UNO w Arduino IDE, będziesz miał wiele przykładów serwerów do wyboru. Opis pinów masz jakbyś używał ESP01, kup sobie jakiegoś WEMOS mini, będziesz miał więcej pinów dla czujników. Do każdego czujnika używanego w Arduino są przykładowe biblioteki.
Na razie Ci nie działa bo za mało umiesz. Trzeba wchłonąć trochę wiedzy o wszystkim, w parę dni tego nie ogarniesz.