Arduino Polska Forum

Pełna wersja: 2 komparatory + mala logika
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3
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 Smile.

Apke na androida zaonstalowalem bez problemu , ale niestety ESP nadal nie widzi Sad
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.
Może problemem jest procedura łączenia ESP32 <-> Android.

Spróbuj wg. tego tutoriala:
https://randomnerdtutorials.com/esp32-bl...duino-ide/
[attachment=1365]

Jednak chyba nie ma Bloototha, ma tylko wifi.
Apka pod wifi jest tez Smile juz zainstalowalem.

Teraz tylko dobry kod Smile

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 Smile

[attachment=1369]

Ale jak zobaczyc teraz wejscie adc 0  Huh
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)
Stron: 1 2 3