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
5,841
Mesajlar
99,633
Üyeler
2,480
Son üye
mozcelikors

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top