Uzaktan veri okuma

fide

Meraklı ve "nasıl" sorusunu seven biri
Katılım
8 Eylül 2021
Mesajlar
1,577
Merhaba.
Uzaktan sıcaklık verisi okuma projesi yapmak aklımda idi. Fakat 4 farklı senaryo oluşturdum ama hayata geçirememiştim.
Birkaç hafta önce bir arkadaşım GSM modül destekli senaryoyu yapmamı istedi. Ortaya bu proje çıktı.
İşlemci olarak tek çekirdek ve 180MHz hıza sahip ESP32-C3-MINI1 modül kullandım. USB ve 10 io var. Diğer esp32 kartlara göre USB ile programlanması ve ch340 / pl2303 gibi UBS to serial converter gerektirmemesi güzel. Ayrıyeten esp32 ailesinin en ucuz modülü. Sadece $2.

1678603895731.png

Aynı zamanda ESP32 ailesinin en küçük footprinte sahip üyesi. BGA pin yapısına sahip.
Elek kullandığım için lehimlemek problem olmadı.

IMG_20230311_214325.jpg


IMG_20230311_215828.jpg




IMG_20230312_094417.jpg




IMG_20230312_094458.jpg


IMG_20230312_094516.jpg

Cihaz üzerinde Quectel M95 GSM modül, AHT10 sıcaklık - nem sensörü, NTC termistör ve LM2576 regülator bulunuyor.
 
Kart ilk gölünü tam doksana çaktı.
Aslında bu gölü yemezdim ama devkit üzerindeki küçük bir nüans beni kandırdı.

Kullandığım modül esp32-c3-mini1
Sipariş ettiğim dev kit ise esp32-mini1 fakat bunu mini1 üzerindeki çip esp32-c3 mini1 değil.
Onu flaşladım ve micropython ile LED blink yaptım ama esp32-c3 için micropython imaj dosyası hatalı flaş işleminden sonra invalid adress isimli bir hata veriyor.

Şimdilik ya Arduino ile kod geliştireceğim (ki benim için işkence) yada esp idf öğreneceğim
 
Son düzenleme:
Kart ilk gölünü tam doksana çaktı.
Aslında bu gölü yemezdim ama devkit üzerindeki küçük bir nüans beni kandırdı.

Kullandığım modül esp32-c3-mini1
Sipariş ettiğim dev kit ise esp32-mini1 fakat bunu mini1 üzerindeki çip esp32-c3 mini1 değil.
Onu flaşladım ve micropython ile LED blink yaptım ama esp32-c3 için micropython imaj dosyası hatalı flaş işleminden sonra invalid adress isimli bir hata veriyor.

Şimdilik ya Arduino ile kod geliştireceğim (ki benim için işkence) yada esp idf öğreneceğim
C dilleri ile içli dışlı olmak her zaman avantajdır :))

yazarsın abi ya C bilen popülasyon olarak kalabalığız bi konu açarsın herkes bir yerinden tutar.
 
C diline yabancı değilim Ahmet. Ama C dili ile bu işi yapmak işime gelmiyor. Çünkü kodlama rutini çok uzun.
a="gprmc,121518.000,1512.4546,04532.1234" diye devam eden bir GPS cümlesini iki satırda hem parse edip hem de geçerli olup olmadığını kontrol etmek varken yarım saat bunu nasıl parse ederim diye düşünmek çok işime gelmiyor. İşi yapmak yerine bunu "C" dilinde nasıl yaptırabilirim deyip , Python / micropython daki kütüphaneleri oturup yazmak ve test etmek gerekiyor. Dosya okuma, yazma ve edit işlemleri ise ayrı bir amelelik.
 
C diline yabancı değilim Ahmet. Ama C dili ile bu işi yapmak işime gelmiyor. Çünkü kodlama rutini çok uzun.
a="gprmc,121518.000,1512.4546,04532.1234" diye devam eden bir GPS cümlesini iki satırda hem parse edip hem de geçerli olup olmadığını kontrol etmek varken yarım saat bunu nasıl parse ederim diye düşünmek çok işime gelmiyor. İşi yapmak yerine bunu "C" dilinde nasıl yaptırabilirim deyip , Python / micropython daki kütüphaneleri oturup yazmak ve test etmek gerekiyor. Dosya okuma, yazma ve edit işlemleri ise ayrı bir amelelik.
yaparız kalabalığız ya,
antreman olur bize de.

araya asm'de serpiştiririz bu ara temel asm öğrenmeye çalışıyorum
 
Aslında bu tam bir C ve stm32 projesi olur ama bir türlü maçam yemiyor. Asıl sıkıntı orada.
Yoksa bu projede esp32nin yeri yok. Ucuz + footprint küçük + kristal vb yan eleman yok + micropython/Arduino/esp ile low level ihtiyaç olmadan programlanıyor.

Programlama kabiliyetim forumdaki bazı (@taydin gibi) iyi olsa stm32 yada eşdeğer mcuyu tek geçerim ama o treni şimdilik yakalayamadık. O yüzden öğrenmek yerine günü kurtarmaya çalışıyoruz. Bu da bağlılıklarını ( imaj, kütüphane vb) hat safhaya çıkarıyor. Sorun bende aslında.

@Micro Step GSM modül, wifi, BT içeren projeleri genelde pek sevmiyor ama başına geçse bunu ASM ile yazar. :dusun2::dusun2:
 
Destek alabileceğin bir sürü kişi var forumda bence giriş o işe :)
 
Bence de @taydin abi haklı.
Benim bildiğim C dilleri ile uğraşan ve projeye olabildiğince destek verecek;
@ozkarah ,
@Endorfin35+,
Ben,
@Gokrtl ,
@Atak,
@taydin.

Var hepimiz küçük bir kısımda bile uğraşssak proje çabuk biter ve hepimiz gömülü alalında 1 adım daha ilerlemiş oluruz.

Ben bu ara kafayı asm'ye taktım 'program real size' olarak çok farklı boyuta taşıyor
 
Bu akşam başlayayım. Tıkandığım yerde konu açarım.
 
Kompleks bir proje olmayacak gibi. Bulaşmak için güzel bahane olur size. El atarız arada.
Pille mi çalışacak, harici beslemeyle mi?
 
Harici adaptör yada akü ile beslenecek. Çok karmaşık bir proje değil.
 
Sen bir C ile yola çık. Şıkıştıpın yerde itina ile köstek olurum. :katil2:

@Ahmet C bildiğimi nerden çıkardın? Ben genelde iki satır yazıyorum, geri kalan 200 satırı Timur abi tamamlıyor. :katil2:
 

Aslında 2019'da bu projeyi farklı bir gsm modülle yaptım. Fonksiyonel oldu ama benim çok hoşuma gitmemişti.

Açıkçası

Python:
elma = "10TL"
armut = "20TL"
print(f"elma: {elma}, armut: {armut} fiyatla satılmaktadır.\r\n")

yerine

Arduino:
elma = "10TL";
armut = "20TL";
Serial.print("elma: ");
Serial.print(elma);
Serial.print(", armut: ");
Serial.print(armut);
Serial.print(" fiyat ile satılmaktadır.");

yazmak bana gereksiz geliyor.

Pythonda 1 satırda yazılan kod Arduino ile bazı yerlerde 5 katına çıkıyor.
 
Son düzenleme:
  • Beğen
Reactions: nt
1678713667126.png

Bir fonksiyona text parametre göndermek yada bir değişkene text içerik aktarmak bu kadar zor olmamalı.

Sıkıntı farklı bir yerdeymiş ( ama yine string tanımı ile alakalı.)

Diğer taraftan başka bir sorun ortaya çıktı. ESP32-C3 modül düzenli aralıklarla reset atıyor. Sanki watchdog enable edilmiş gibi düzenli aralıklarla reset atıyor.
 
Pythonda 1 satırda yazılan kod Arduino ile bazı yerlerde 5 katına çıkıyor.

Python o kolaylığı sağlıyor, ama çok daha fazla hafıza gereksinimi var ve belli bir işlemin gerçekleştirilmesi çok daha uzun sürüyor. Bunların ikisi de önemli değilse tabiki kolaylık açısından Python kullanmak gerekir.

C++:
static int fiyat_elma = 50;
static int fiyat_armut = 80;

static char buffer[200];
snprintf(buffer, sizeof(buffer), "elma %d TL, armut %d TL\n", elma_fiyat, armut_fiyat);
Serial.print(buffer);
 
22801 eklentisine bak
Bir fonksiyona text parametre göndermek yada bir değişkene text içerik aktarmak bu kadar zor olmamalı.

Sıkıntı farklı bir yerdeymiş ( ama yine string tanımı ile alakalı.)

Diğer taraftan başka bir sorun ortaya çıktı. ESP32-C3 modül düzenli aralıklarla reset atıyor. Sanki watchdog enable edilmiş gibi düzenli aralıklarla reset atıyor.

loop kodunuzda delay() var mı?
 
Proje kelimenin tam anlamıyla çuvalladı. PCB tasarımı olarak sıkıntı yok. İşlemciye firmware yüklüyorum. Arduino ile program atıyorum. Gsm modülü uyandırıp "AT" komutu gönderip cevap alıyor ama Arduino ortamında düzenli olarak reset atıyor. Micropyton tarafında ise invalid hedaer 0xffffff diye bir hata verip reset atıyor. ESP IDF ile program yükleyemeyi ise beceremedim. Geriye PCByi imaj ile düzgün çalışan başka bir ESP32 versiyonuna göre tekrar güncellemek, sipariş vermek, kargo beklemek, gümrük ödemek, pcby dizmek ve hata çıkmaması için dua etme kkalıyor:tamam1:tamam1:tamam2::tamam2::kizgin2::kizgin2::cheeky2::cheeky2::cheeky4::cheeky4::cheeky5::cheeky5::dans1::dans1::saril::saril::dans2::dans2::dusun1::dusun1::dusun2::dusun2::bilmem1::bilmem1: Emoji filmindeki gibi oldu ama projenin bana hissettirdikleri bunlar.
 
Uzun delaylar, normalden uzun sürecek fonksiyonlar reset attırıyor olmalı.
ben 8266 ile uğraşırken saç baş yoluyordum.
bir fonksiyonu adımlara böl;
mesela bir komutta 3 farklı işlem yerine adım adım yaptır o işlemleri.

uzun süren işlemler ve delay sevmiyor esp'ler.
ben delay yerine 10ms'lik timer kuruyordum sürekli değişkeni arttırıyordum delayı öyle yapmıştım.
 
Arduino:
#include <HardwareSerial.h>
int gsmPowerPin = 10;
int gsmExtPowerPin = 3;
int led = 2;

HardwareSerial gsm(1);
char cmd[50];
char resp[50];
char text[50];

int pinValue;

int sayac;
String sendCmd(char text[50])
{
  gsm.println(text);
  delay(250);
  if (gsm.available()>0)
  {
    char resp = gsm.read();
    Serial.print(resp);  
  }

}
void gsmCheck()
{
  pinValue = digitalRead(gsmExtPowerPin);
  if (pinValue == 0)
  {
    digitalWrite(gsmPowerPin, HIGH);
    delay(1000);
    digitalWrite(gsmPowerPin, LOW);
    delay(100);
  }

}


void setup() {
  // put your setup code here, to run once:
  pinMode(gsmPowerPin, OUTPUT);
  pinMode(gsmExtPowerPin, INPUT);
  pinMode(led, OUTPUT);
   gsm.setTimeout(300);
  gsm.begin (115200, SERIAL_8N1, 6, 7);
 
  Serial.begin(115200);
  delay(100);
  Serial.println("RemoteRead Rev:1.0");
  digitalWrite(led, HIGH);
  delay(250);
  digitalWrite(led, LOW);
 
}

void loop() {
  // put your main code here, to run repeatedly:
  char text[] = "AT";
  gsmCheck();
  sendCmd(text);


   

}

Seri konsol Çıktı:
Seri Konsol Çıktısı:
RemoteRead Rev:1.0
AT

OK
AT


AT

OK
AT

OK
AT

OK
AT

OK
AT

OK
AT

OK
AT

OK
AT

OK
AT

ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0x15 (USB_UART_CHIP_RESET),boot:0xe (SPI_FAST_FLASH_BOOT)
Saved PC:0x42011ae2
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fcd5810,len:0x438
 

Bu da video çıktısı. Core dump failed diye bir uyarı var.
 
Son düzenleme:

Forum istatistikleri

Konular
5,656
Mesajlar
97,295
Üyeler
2,438
Son üye
İbrahimSönmez

Son kaynaklar

Son profil mesajları

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)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top