ESP01(8266) ESP-NOW+0.96'' OLED SORUNU

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,581
Programın herhangi bir kısmında oled ekranı kullanabiliyorum

fakat
void dataReceived(uint8_t *senderMac, uint8_t *data, uint8_t dataLength)
Bu voidin içinde displaye yazı yazdırmaya çalıştığımda
Panic core_esp8266_main.cpp:137 __yield
Seri porta bu çıktıyı yapıp ardından
sürekli bunları çeviriyor ve sonunda resetliyor kendini
3fffef00: 3ffeaa78 00000037 00000000 0000003c 3fffef10: 00000000 3ffeaa82 40232f13 3ffec960 3fffef20: 3ffeaa6c 3fffdcc0 3ffe8f58 00004420

Kullandığım kütüphaneler
#include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
Bunlar.
 
Last edited by a moderator:

Gokrtl

Gökhan Kartal
Staff member
Katılım
27 Şubat 2019
Mesajlar
7,851
void dataReceived(uint8_t *senderMac, uint8_t *data, uint8_t dataLength)
Bunun ismine bakılırsa veri almak üzere yazılmış bir fonksiyon. Sen bunun içinde ekrana veri göndermeye çalışıyorsun. Bırak bu istediği işlemi yapsın sen de hemen sonrasında gönder veriyi.
(Kod hakkında hiç bir fikrim yok. Mantıklı yorumlamaya çalıştım)
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,581
Bunun ismine bakılırsa veri almak üzere yazılmış bir fonksiyon. Sen bunun içinde ekrana veri göndermeye çalışıyorsun. Bırak bu istediği işlemi yapsın sen de hemen sonrasında gönder veriyi.
(Kod hakkında hiç bir fikrim yok. Mantıklı yorumlamaya çalıştım)
Abi programın tamamını atarsam çok kafa karışıklığı olacak diye böyle atıyorum.
Şöyle çalışıyor;
esp_now_register_recv_cb(dataReceived);

Bu satır esp-now'dan bilgi geldiğinde çalışıyor ve bizi
void dataReceived(uint8_t *senderMac, uint8_t *data, uint8_t dataLength)
Bu voidin içine götürüyor.
Data geldiğinde yapacaklarını bu voidin içine yazıyorsun
bende bu voidin içinde displaye yazması için komut veriyorum esp sapıtıyor resetliyor kendini.

Ama programın başka bir yerinde setup kısmında vs. ekranı kullanabiliyırum resetlemiyor bu dataReceived voidinde sapıtıyor sadece.
 

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
13,758
Demekki displaye birşey yazmak ya çok uzun sürüyor, ya interrupt'ları kapatıyor, yada ESP nin hoşuna gitmeyen başka birşey yapıyor.

callback içinde sadece bir flag set et. Ana döngüde bu flag'ı görürsen ekrana ne yazacaksan yaz sonra da flag'ı clear et. Ama dikkat et flag tek byte olsun uint8_t yoksa başka, daha pis sorunlar çıkar.
 

Gokrtl

Gökhan Kartal
Staff member
Katılım
27 Şubat 2019
Mesajlar
7,851
Abi programın tamamını atarsam çok kafa karışıklığı olacak diye böyle atıyorum.
Şöyle çalışıyor;
esp_now_register_recv_cb(dataReceived);

Bu satır esp-now'dan bilgi geldiğinde çalışıyor ve bizi
void dataReceived(uint8_t *senderMac, uint8_t *data, uint8_t dataLength)
Bu voidin içine götürüyor.
Data geldiğinde yapacaklarını bu voidin içine yazıyorsun
bende bu voidin içinde displaye yazması için komut veriyorum esp sapıtıyor resetliyor kendini.

Ama programın başka bir yerinde setup kısmında vs. ekranı kullanabiliyırum resetlemiyor bu dataReceived voidinde sapıtıyor sadece.
Fonksiyon içine fonksiyon çağırıyorsun, onun da içine kendi kodlarını yerleştiriyorsun. Bana pek mantıklı gelmedi bu dizilim.
Peki bu dataReceived içine başka birşey yazınca sorun çıkmıyor mu?
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,581
Fonksiyon içine fonksiyon çağırıyorsun, onun da içine kendi kodlarını yerleştiriyorsun. Bana pek mantıklı gelmedi bu dizilim.
Peki bu dataReceived içine başka birşey yazınca sorun çıkmıyor mu?
Çok fazla serial print kullanınca da bağırıyor bana.

normalde flag bağımlısıyımdır ama neden burada aklıma gelmedi bilmiyorum.
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,581
espnow slave:
void dataReceived(uint8_t *senderMac, uint8_t *data, uint8_t dataLength){
    gelen1 = packet.sensor1;
    fl = 1;
}
Bu şekilde yaptım ve sorunsuz yazıyorum veriyi.

Fakat birde ihtiyacım olan.
Verinin gelmediğini anlayıp gelen1 değişkeninini sıfırlamak.
Çünkü menzil testini yaparken eğer bağlantı koparsa bu haliye anlayamam bağalntının koptuğunu.

Belli bir süre tutup bu süre sonunda ESP.restart(); komutunu çalıştırıcam.
Yada;
Bağlantı olup olmadığını sorgulayan bir komut bulucam.
 
Top