Esp32 Bluetooth yardım.

Katılım
22 Aralık 2022
Mesajlar
83
Merhabalar
Esp32 kart ve servo moturum var. Birçok kod denedim ama yapamadım. İstediğim esp32 benim telefonum Bluetooth ile bağlandığında servo motor sola doğru 3 saniye dönsün bağlantı koltuğunda sağ doğru 3 saniye dönsün. Ama tüm n denemelerime rağmen yapamadım. Bylnk benzeri uygulama üzerinden değil sadece benim maç adresim ile bağlantı kurulursa komut devreye girsin istiyorum. Yardımcı olabilecek üstat varmıdır.
 
C++ Bluetooth MAC adresini biliyorum kod icerisinede yazsam yine bağlantı kurmuyor ve servo USB takar takmaz dönmeye başlıyor. Kulandigim servo mg996r 180 derece versiyonuydu direnç ile potansiyometreyi iptal edip 360 derece yaptım.
 
#include <ESP32Servo.h> #include <BLEDevice.h> #include <BLEServer.h> Servo myServo; BLEServer *pServer = NULL; bool bluetoothConnected = false; BLEAddress targetDeviceAddress("AA:BB:CC:DD:EE:FF"); // Hedef cihazın MAC adresi class MyServerCallbacks : public BLEServerCallbacks { void onConnect(BLEServer* pServer) { Serial.println("Bluetooth Bağlandı"); if (pServer->getConnectedCount() > 0) { BLEAddress connectedAddress = pServer->getPeerDevices()[0]->getAddress(); if (connectedAddress == targetDeviceAddress) { bluetoothConnected = true; } } } void onDisconnect(BLEServer* pServer) { Serial.println("Bluetooth Bağlantısı Kesildi"); bluetoothConnected = false; } }; void setup() { Serial.begin(115200); myServo.attach(5); BLEDevice::init("ESP32-Servo"); pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks()); BLEService *pService = pServer->createService(BLEUUID("0000180D-0000-1000-8000-00805F9B34FB")); pService->start(); BLEAdvertising *pAdvertising = pServer->getAdvertising(); pAdvertising->start(); } void loop() { if (bluetoothConnected) { turnServo(0, 3 * 1000); // Sola 3 saniye döndür } else { turnServo(180, 3 * 1000); // Sağa 3 saniye döndür } } void turnServo(int targetAngle, int duration) { int currentAngle = myServo.read(); unsigned long startTime = millis(); while (millis() - startTime <= duration) { int angle = map(millis() - startTime, 0, duration, currentAngle, targetAngle); myServo.write(angle); delay(15); / / Servo güncelleme frekansını ayarlamak için } }
 
Örnek kod buna benzer bir sürü kod geliştirdim eklemeler çıkarmalar yaptım ChatGPT üzerinden yazdırdım hiç biri olmadı.
 
hangi pin ?
python kodu yazmıştım daha önce esp için onu yazıyım buraya bi dene test amaçlı. Ben c++ bilmiyorum, pythonla test ederiz.
 
Bu esp8266 bilgileri içeriyor esp8266 da Bluetooth yongası yok. Yükleme ve programlsri inceledim ama benim bildiğim yanlışla düzelt lütfen Arduino ide Python kodları karta yuklenebiliyor
 
ardunio ide bilmiyorum. Bir rehber paylaşıyorum takıldığın yerde seslen

öncelikle MicroPython'un resmi web sitesinden ESP8266 için uygun sürümü indir ve yükle

kartla iletişim kurmak için Linux'da Minicom kullanabilirsin.
sudo minicom -b 115200 -o -D /Burayıgüncellemelisin
ardından main.py isimli bir dosya oluşturup verdiğim kodu yapıştır kaydet
main.py dosyası
main.py:
import time
from machine import Pin, PWM
import bluetooth

servo_pin = PWM(Pin(2), freq=50) #motor pinini
buton_ac_pin = Pin(4, Pin.IN, Pin.PULL_UP) #buton pinleri
buton_kapat_pin = Pin(5, Pin.IN, Pin.PULL_UP)

server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
port = 1
server_socket.bind(("", port))
server_socket.listen(1)
print("Bluetooth bekleniyor...")
izinli_mac_adresi = "MACADRESİNİ BURAYA YAZ" #mac adresi
client_socket, adres = server_socket.accept()
print("bağlantı ok:", adres)

def kapıyı_ac():
    servo_pin.duty(40)  #motor ayarları
    time.sleep(3)       #3 saniye bekleme
    servo_pin.duty(77)  #motoru geri konuma getirme
def kapıyı_kapat():
    servo_pin.duty(115)
    time.sleep(2)       
    servo_pin.duty(77) 

try:
    while True:
        if buton_ac_pin.value() == 0:
            print("Açıl susam açıl ok")
            kapıyı_ac()
            time.sleep(1)  # kısa bir bekleme

        if buton_kapat_pin.value() == 0:
            print("kapan susam kapan")
            kapıyı_kapat()
            time.sleep(1) 
        veri = client_socket.recv(1024).decode().strip()
        if veri and bluetooth.lookup_name(adres[0]) == izinli_mac_adresi:
            print("bağlantı ok açıyoruz.")
            kapıyı_ac()
except KeyboardInterrupt:
    print("iş tamam")
    servo_pin.deinit()
    client_socket.close()
    server_socket.close()
kaydettiğin dosyayı karta yüklemek için bu kodu kullanabilirsin
Python:
import os
os.mkdir('main')
os.chdir('main')
with open('main.py', 'w') as f:
    f.write('''
    #kodu buraya yapıştır
    ''')
 
kodu revize ettim pin, mac adresi gibi yerleri güncellersin kod bluetooth algılandıgında çalışcak şekilde

Python:
import time
from machine import Pin, PWM
import ubluetooth as bluetooth

servo_pin = 2 
servo = PWM(Pin(servo_pin), freq=50)
acma_buton_pin = 4 
kapama_buton_pin = 5
acma_butonu = Pin(acma_buton_pin, Pin.IN, Pin.PULL_UP)
kapama_butonu = Pin(kapama_buton_pin, Pin.IN, Pin.PULL_UP)
bluetooth_baglantisi = None
bluetooth_algilandi = False

def kapıyı_ac():
    servo.duty(40) 
    time.sleep(3)
    servo.duty(0)   
    time.sleep(1)
    servo.duty(80) 

def kapıyı_kapat():
    servo.duty(80) 
    time.sleep(2)

def bluetooth_bağlan():
    global bluetooth_baglantisi
    while not bluetooth_baglantisi:
        try:
            bluetooth_baglantisi = bluetooth.BLE()
            bluetooth_baglantisi.active(True)
            print("blue ok")
        except OSError as e:
            pass

def main():
    global bluetooth_baglantisi, bluetooth_algilandi
    try:
        while True:
            if acma_butonu.value() == 0:
                kapıyı_ac()
            elif kapama_butonu.value() == 0:
                kapıyı_kapat()
            if not bluetooth_baglantisi:
                bluetooth_bağlan()
            if bluetooth_baglantisi:
                try:
                    bluetooth_baglantisi.gap_advertise(100, b'\x02\x01\x02\x06\x03\x03\x19\x01\x03\x03\x0a')                   
                    while True:
                        event = bluetooth_baglantisi.events().get()
                        if event:
                            event_type, event_data = event
                            if event_type == bluetooth.EVT_GAP_ADVERTISING_REPORT:
                                bluetooth_algilandi = True
                                break
                        if bluetooth_algilandi:
                            kapıyı_ac()
                            bluetooth_algilandi = False
                except OSError:
                    bluetooth_baglantisi = None
    except Exception as e:
        print("hata:", e)
    finally:
        servo.deinit()
        if bluetooth_baglantisi:
            bluetooth_baglantisi.stop_advertising()

if __name__ == "__main__":
    main()
 
1709196487172.png
burada uyarı veriyor ve sayfa sonu main() satırında uyarı veriyor
 
dolap uygulamasından teklif verdim dönmedi bir kaç gün bekle alıyım bi esp32 bu şekilde ilerliyemeyiz
 
@abdullah2525 doğru yapılandırma ile ESP32'yi çalıştırdığını varsayıyorum. Aşağıdaki kodu kendine uyarlarsan çalışacaktır.

C#:
bool cihazBaglandi = false;
bool oncekiCihazDurumu = false;

class serverCallbacks : public BLEServerCallbacks
{
  void onConnect(BLEServer *pServer)
  {
    cihazBaglandi = true;
  };
  void onDisconnect(BLEServer *pServer)
  {
    cihazBaglandi = false;
  }
};

void setup()
{
  pServer = BLEDevice::createServer();
  pServer->setCallbacks(new serverCallbacks());
}

void loop()
{
  if (!cihazBaglandi && oncekiCihazDurumu)
  {
    delay(500);                  // Bluetooth stack'a hazır olması için zaman ver
    pServer->startAdvertising();
    // Bu noktada bağlantı koptu. Tekrar bağlantı kurabilmek için ESP32 hazır hale geldi. İstediğin komutu burada işleyebilirsin.
    oncekiCihazDurumu = cihazBaglandi;
  }
  if (cihazBaglandi && !oncekiCihazDurumu)
  {
    // Bu noktada bağlantı kuruluyor. İstediğin komutu burada işleyebilirsin.
    oncekiCihazDurumu = cihazBaglandi;
  }
}
 
ardunio ide bilmiyorum. Bir rehber paylaşıyorum takıldığın yerde seslen

öncelikle MicroPython'un resmi web sitesinden ESP8266 için uygun sürümü indir ve yükle

kartla iletişim kurmak için Linux'da Minicom kullanabilirsin.
sudo minicom -b 115200 -o -D /Burayıgüncellemelisin
ardından main.py isimli bir dosya oluşturup verdiğim kodu yapıştır kaydet
main.py dosyası
main.py:
import time
from machine import Pin, PWM
import bluetooth

servo_pin = PWM(Pin(2), freq=50) #motor pinini
buton_ac_pin = Pin(4, Pin.IN, Pin.PULL_UP) #buton pinleri
buton_kapat_pin = Pin(5, Pin.IN, Pin.PULL_UP)

server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
port = 1
server_socket.bind(("", port))
server_socket.listen(1)
print("Bluetooth bekleniyor...")
izinli_mac_adresi = "MACADRESİNİ BURAYA YAZ" #mac adresi
client_socket, adres = server_socket.accept()
print("bağlantı ok:", adres)

def kapıyı_ac():
    servo_pin.duty(40)  #motor ayarları
    time.sleep(3)       #3 saniye bekleme
    servo_pin.duty(77)  #motoru geri konuma getirme
def kapıyı_kapat():
    servo_pin.duty(115)
    time.sleep(2)      
    servo_pin.duty(77)

try:
    while True:
        if buton_ac_pin.value() == 0:
            print("Açıl susam açıl ok")
            kapıyı_ac()
            time.sleep(1)  # kısa bir bekleme

        if buton_kapat_pin.value() == 0:
            print("kapan susam kapan")
            kapıyı_kapat()
            time.sleep(1)
        veri = client_socket.recv(1024).decode().strip()
        if veri and bluetooth.lookup_name(adres[0]) == izinli_mac_adresi:
            print("bağlantı ok açıyoruz.")
            kapıyı_ac()
except KeyboardInterrupt:
    print("iş tamam")
    servo_pin.deinit()
    client_socket.close()
    server_socket.close()
kaydettiğin dosyayı karta yüklemek için bu kodu kullanabilirsin
Python:
import os
os.mkdir('main')
os.chdir('main')
with open('main.py', 'w') as f:
    f.write('''
    #kodu buraya yapıştır
    ''')
Ahaha, sana MicroPython ogren dedigimde burun kiviriyordun. Simdi onerir olmussun. :tamam1 :hihi1:
 
  • Haha
Reactions: nt
@abdullah2525 doğru yapılandırma ile ESP32'yi çalıştırdığını varsayıyorum. Aşağıdaki kodu kendine uyarlarsan çalışacaktır.

C#:
bool cihazBaglandi = false;
bool oncekiCihazDurumu = false;

class serverCallbacks : public BLEServerCallbacks
{
  void onConnect(BLEServer *pServer)
  {
    cihazBaglandi = true;
  };
  void onDisconnect(BLEServer *pServer)
  {
    cihazBaglandi = false;
  }
};

void setup()
{
  pServer = BLEDevice::createServer();
  pServer->setCallbacks(new serverCallbacks());
}

void loop()
{
  if (!cihazBaglandi && oncekiCihazDurumu)
  {
    delay(500);                  // Bluetooth stack'a hazır olması için zaman ver
    pServer->startAdvertising();
    // Bu noktada bağlantı koptu. Tekrar bağlantı kurabilmek için ESP32 hazır hale geldi. İstediğin komutu burada işleyebilirsin.
    oncekiCihazDurumu = cihazBaglandi;
  }
  if (cihazBaglandi && !oncekiCihazDurumu)
  {
    // Bu noktada bağlantı kuruluyor. İstediğin komutu burada işleyebilirsin.
    oncekiCihazDurumu = cihazBaglandi;
  }
}
Dediğim gibi kodlamada yeniyim Bu kodda benim telefonumu nasıl algılayacak. Mac adresi göremedim.bende bilmiyor olabilirim. Bağlantı şekli nasıl olacak aciklayabilirmisi
 

Forum istatistikleri

Konular
6,984
Mesajlar
119,299
Üyeler
2,835
Son üye
alpermete

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top