Ja wgrałem to do swojego ESP32 Wroom32, płytka Doit dev kit v1, telefon wykrywa moduł i go paruje, potem w programie jw wybieram i łączy. Ten program obsługuje też BT LE i wtedy procedura wyglądałaby chyba inaczej, telefon nie widzi modułu w ustawieniach BT, program wykrywa BT w zakładce BT LE.
Witam
.
Apke na androida zaonstalowalem bez problemu , ale niestety ESP nadal nie widzi
Pewnie cos z kodem nie tak. Zmienilem plytke na ta: plytke " Doit dev kit v1 ), ale to nie pomoglo - nadal apka nie widzi ESP . Ani narmalnie ani LE.
Moze w IDE brakuje mi czegos ??? Choc kompilator kompiluje.
Nie wszystkie moduły ESP32 mają BT, ale nie próbowałem wgrać nigdy programu do płytki, np. C3 bez BT, kodu skompilowanego dla płytki z BT i nie wiem czym to się objawia. Wgrałem BT terminal LE do ESP32 C3, ona nie ma zwykłego BT, tylko LE, i telefon też wykrywa jako BT LE. Terminal LE z ESP32 działa bardzo dziwnie, w telefonie jest ciągły napływ śmieci, ale od strony ESP wygląda OK.
Może użyj innego telefonu, może nie dałeś aplikacji uprawnień, ja używam Arduino IDE 1.8.19 a core ESP32 2.0.6, nic więcej nie trzeba, jak już pisałem wgrałem Twój kod.
[
attachment=1365]
Jednak chyba nie ma Bloototha, ma tylko wifi.
Apka pod wifi jest tez
juz zainstalowalem.
Teraz tylko dobry kod
Pozdrawiam
Prawdę mówiąc kod z BT wgrałem wcześniej może z raz by sprawdzić działanie, używam tylko WIFI, choć po prostu stawiam serwer WWW z websockets i tak zarządzam tym co się dzieje w ESP. A poza tym są takie wynalazki jak Blynk, Supla, Tasmota, integracja z aplikacjami do wyklikania myszką, integracja z serwerami jak HOME ASSISTANT. Choć oczywiście możliwych zastosowań przewidziano i oprogramowano już setki, jak nie tysiące, to i tak wolę sobie czasem napisać własny kod.
W Twoim przypadku raczej stawiam na BT w telefonie, mój ESP też jest WROOM, jeden z pierwszych, ale jak się pojawiały potem zubożone ESP32 to miały zupełnie inne oznaczenia. Moje wiekowe Samsungi widzą BT ESP32, a nowy Ipad nie widzi, choć wykrywa Samsunga.
Ten Opis tu byl nie dobry
Ten duzo mniejszy, trzymie stabilnie polaczenie przez siec domowa z "wifi serial terminal" , logujac sie do routera :
#define out_1 16
#define out_2 17
#define out_3 18
#define in_1 0
#include <WiFi.h>
WiFiServer Server(23);
WiFiClient Client; // one client should be able to telnet to this ESP32
const char *ssid = "login do routera";
const char *password = "haslo do routera";
void setup() {
int8_t i;
Serial.begin(115200);
Serial.print("\nAttaching to WiFi '" + String(ssid) + String("' ..."));
WiFi.begin(ssid, password);
Serial.print(" attached to WiFi.\nConnecting to network ... ");
for (i = 60; i != 0; i--) {
if (WiFi.status() == WL_CONNECTED) break;
delay(333);
}
if (i == 0) {
Serial.println("Network connection failed!\nRestarting ESP32!");
delay(1000);
ESP.restart();
}
Serial.print(" network connected.\nLocal IP address: ");
Serial.println(WiFi.localIP());
Server.begin();
Server.setNoDelay(true);
Serial.print("Ready! Use port 23 to connect.");
pinMode(in_1, INPUT) ;
pinMode(out_1, OUTPUT) ;
pinMode(out_2, OUTPUT) ;
pinMode(out_3, OUTPUT) ;
}
void loop() {
delay(200);
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi not connected! Retrying ...");
if (Client) Client.stop();
return;
}
if (Server.hasClient()) { //check if there are any new clients
Client = Server.available();
if (!Client) Serial.println("available broken");
Serial.print("New client: ");
Serial.println(Client.remoteIP());
}
if (Client && Client.connected()) { //check clients for data
if (Client.available()) {
while (Client.available())
Serial.write(Client.read()); //get data from the telnet client and push it to the UART
}
}
else if (Client) Client.stop();
if (Serial.available()){ //check UART for data
size_t len = Serial.available();
char sbuf[len];
Serial.readBytes(sbuf, len);
if (Client && Client.connected()) Client.write(sbuf, len);
}
if
(analogRead(in_1) < 3030)
{digitalWrite(out_3, LOW); }
if
(analogRead(in_1) > 3600)
{ digitalWrite(out_3, HIGH) ; }
}
Polaczenie jest
[attachment=1369]
Ale jak zobaczyc teraz wejscie adc 0
Masz zrobiony bufor na text
char sbuf[len];
Z serial wczytujesz do bufora
Serial.readBytes(sbuf, len);
W kolejnych liniach jeśli klient jest podłaczony to mu wysyłasz ten bufor jako text
Client.write(sbuf, len);
Tak samo robisz z odczytną wartością z ADC, zapisz sobie tę liczbę do bufora, tablicy char, wyślij text do podłączonego klienta.
Przyklad użycia spritf by w bufor char umieścić liczby wraz z komentarzem.
Kod:
#define led 13
uint32_t czasTeraz,czasPoprzedni,tik=100; //tik musi byc mniejszy niz 1000 i dzilic 1000ms na rowne czesci
uint8_t nTik,sekundy,minuty,godziny,dni; //liczniki tikow, sekund, itd.
bool fnTik,fsekundy,fminuty=1,fgodziny,fdni; //flagi zdarzen nowy tik, nowa sekunda,minuta, godzina, dzien
char napis[10];
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(led,OUTPUT);
}
//oczywiscie serialprinty i ledy sa do wyrzucenia
void loop() {
// put your main code here, to run repeatedly:
//gdy nowa sekunda zmien stan led
if (fsekundy)
{
digitalWrite(led, ! digitalRead (led));
}
//gdy nowa sekunda i co dwie sekundy
if (fsekundy && sekundy%2==0)
{
sprintf(napis,"%03d:%02d:%02d",godziny,minuty,sekundy);
Serial.println(napis);
}
if (fminuty && minuty%30==0) //gdy nowa minuta i co 30min
{
Serial.println("Minelo 30 minut");
}
czas();
}
void czas()
{
czasTeraz=millis();
fnTik=fsekundy=fminuty=fgodziny=fdni=0;
if((uint32_t)(czasTeraz-czasPoprzedni)>=tik) //tak napisany warunek jest odporny na "klątwe 50 dni millis()"
{
czasPoprzedni=czasTeraz;
fnTik=1;
nTik++;
if(nTik>=(1000/tik))
{
nTik=0;
sekundy++;
fsekundy=1;
if (sekundy>=60)
{
sekundy=0;
minuty++;
fminuty=1;
if (minuty>=60)
{
minuty=0;
godziny++;
fgodziny=1;
if (godziny>=24)
{
godziny=0;
fdni=1;
dni++;
}
}
}
}
}
}
Troche to dla mnie jak abracadabra , ale jak dobrze zrozumialem to mi by chodzilo tylko o wyswietlanie na androidzie napiecia na wejsciu 0 ADC (na bierzaco , Live)