Sim800l ve esp32 ile bir proje hazırladık ancak proje bittikten sonraki gün sms atma kısmında smslerin gitmediğini fark ettik. bir gün çalışıp bir gün çalışmaması tuhaf geldi

Sim kartta bakiye vardı ve doğru takılmıştı. Eski bir telefona takıp test ettik sms gidiyordu. Projemizin donanım ve kod kısmını sürekli kontrol ettik hata bulamadık. Yardımcı olabilirseniz çok memnun oluruz. Birde proje teslim tarihine 3 gün kaldı erken cevap verebilirseniz çok güzel olur. Kodları aşağıya ekledim. Şimdiden teşekkürler.

Not: ilk kez bu platformu kullanıyorum kod yazımında gariplikler olduğu için özür dilerim.

from machine import UART, Pin, I2C
from i2c_lcd import I2cLcd
import time, ujson

UART ayarları

uart = UART(2, baudrate=9600, tx=17, rx=16)

Son işlenen SMS’leri tutan liste

processed_sms =
MAX_STORED = 3

SMS tampon

sms_buffer = “”
sms_ready = False

Butonlar ve buzzer

buzzer = Pin(2, Pin.OUT)
buzzer.off()

helpB = Pin(4, Pin.IN, Pin.PULL_UP)
personB = Pin(5, Pin.IN, Pin.PULL_UP)

LCD başlatma

try:
i2c = I2C(0, sda=Pin(21), scl=Pin(22))
adress = i2c.scan()
lcd = I2cLcd(i2c, adress[0], 2, 16)
except:
print(“lcd yok”)

AT komutları gönder

def send_command(cmd, delay=150):
uart.write(cmd + ‘\r\n’)
time.sleep_ms(delay)
if uart.any():
print(uart.read().decode())

SMS gönderme fonksiyonu

def send_sms(number, message):
uart.write(‘AT+CMGF=1\r\n’)
time.sleep(1)
uart.write(f’AT+CMGS=“{number}”\r\n’)
time.sleep(1)
uart.write(message)
uart.write(chr(26))
time.sleep(3)

SMS ayrıştırma

def split_sms(raw):
try:
lines = raw.split(“\r\n”)
for i, line in enumerate(lines):
if “+CMT” in line and i + 1 < len(lines):
number = line.split(‘"’)[1]
message = lines[i + 1].strip()
return number, message
except Exception as e:
print(“Hata oluştu:”, e)
return None, None

def add_person(name, phone_number):
try:
with open(“guide.json”, “r”) as file:
data = ujson.load(file)

    # Aynı isim veya numara var mı kontrol et
    for person in data["persons"]:
        if person["name"].lower() == name.lower():
            return "isim zaten var"
        if person["pNumber"] == phone_number:
            return "numara zaten var"

    new_person = {"name": name, "pNumber": phone_number}
    data["persons"].append(new_person)

    with open("guide.json", "w") as file:
        ujson.dump(data, file)

    return "eklendi"
except Exception as e:
    return "Kisi eklenemedi"

def remove_person(name):
try:
with open(“guide.json”, “r”) as file:
data = ujson.load(file)

    found = False
    for person in data["persons"]:
        if person["name"].lower() == name.lower():
            data["persons"].remove(person)
            found = True
            break

    if found:
        with open("guide.json", "w") as file:
            ujson.dump(data, file)
        return "silindi"
    else:
        return "bulunamadi"
except Exception as e:
    return "silme hatasi"

Başlat

send_command(‘AT’)
send_command(‘AT+CMGF=1’)
send_command(‘AT+CNMI=2,2,0,0,0’)
print(“proje başlatıldı”)

while True:
lcd.move_to(0, 0)
lcd.putstr(“YARDIM (3x)”)
lcd.move_to(1, 0)
lcd.putstr(“Kisiler”)

if uart.any():
    try:
        line = uart.readline()
        if line:
            line = line.decode("utf-8", "ignore").strip()
            print("Gelen veri:", line)

            if line.startswith("+CMT"): 
                sms_buffer = line + "\r\n"
            elif sms_buffer:
                sms_buffer += line
                sms_ready = True

            if sms_ready:
                number, message = split_sms(sms_buffer)
                sms_ready = False
                sms_buffer = ""

                if number and message and number != "+905054936236":
                    unique_key = number + message
                    if unique_key not in processed_sms:
                        processed_sms.append(unique_key)
                        if len(processed_sms) > MAX_STORED:
                            processed_sms.pop(0)

                        print("Numara:", number)
                        print("Mesaj:", message)
                        parts = message.strip().split("/")

                        if len(parts) == 2 and parts[0].lower().strip() == "kayit":
                            new_person = parts[1].strip()
                            new_number = number.strip()
                            result = add_person(new_person, new_number)
                            print(result)
                            send_sms(number, f"{new_person} {result}")
                            lcd.clear()
                            lcd.putstr(f"{result}")
                            time.sleep(2)
                            lcd.clear()

                        elif len(parts) == 2 and parts[0].lower().strip() == "sil":
                            del_name = parts[1].strip()
                            result = remove_person(del_name)
                            print(result)
                            send_sms(number, f"{del_name} {result}")
                            lcd.clear()
                            lcd.putstr(f"{result}")
                            time.sleep(2)
                            lcd.clear()

                        else:
                            # Rehberde isim arama
                            try:
                                with open("guide.json", "r") as f:
                                    data = ujson.load(f)
                                    name = None
                                    for person in data["persons"]:
                                        if person["pNumber"] == number:
                                            name = person["name"]
                                            break
                            except:
                                name = None

                            lcd.clear()
                            lcd.move_to(0, 0)
                            if name:
                                lcd.putstr(name[:16])  # İsim varsa onu yaz
                            else:
                                lcd.putstr(number[-16:])  # İsim yoksa numaranın son 16 karakteri

                            lcd.move_to(1, 0)
                            lcd.putstr(message[:16])  # Mesajın ilk 16 karakterini yaz
                            time.sleep(2)
                            lcd.clear()

                    else:
                        print("Aynı SMS tekrar geldi, atlandı.")
                else:
                    print("SMS çözümleme başarısız veya kendi mesajımız.")
    except Exception as e:
        print("Decode hatası:", e)

if personB.value() == 0:
    with open("guide.json", "r") as f:
        values = ujson.load(f)
    for person in values["persons"]:
        lcd.clear()
        lcd.move_to(0, 0)
        lcd.putstr((person["name"] + " :")[:16])
        lcd.move_to(1, 0)
        lcd.putstr(person["pNumber"][:16])
        time.sleep_ms(800)
        lcd.clear()

if helpB.value() == 0:
    lcd.move_to(0, 0)
    lcd.putstr("YARDIM (2x)")
    buzzer.on()
    time.sleep_ms(300)
    buzzer.off()
    time.sleep_ms(200)
    if helpB.value() == 0:
        lcd.move_to(0, 0)
        lcd.putstr("YARDIM (1x)")
        buzzer.on()
        time.sleep_ms(300)
        buzzer.off()
        time.sleep_ms(200)
        if helpB.value() == 0:
            buzzer.on()
            lcd.clear()
            lcd.move_to(0, 0)
            lcd.putstr("SMS yollaniyor")
            time.sleep(0.5)
            buzzer.off()
            with open("guide.json", "r") as f:
                values = ujson.load(f)
            for person in values["persons"]:
                send_sms(str(person["pNumber"]), "selamin aleykum")
            lcd.putstr("SMS yollandi")
            time.sleep(1)
            lcd.clear()

Kodlarınızı yeniden düzenleyin ve tek parça olarak kod tagı kullanarak paylaşın.
Açıklamamalar için # işaretini kullanın.

Umarım doğru paylaşabildim

from machine import UART, Pin, I2C
from i2c_lcd import I2cLcd
import time, ujson

# UART ayarları
uart = UART(2, baudrate=9600, tx=17, rx=16)

# Son işlenen SMS'leri tutan liste
processed_sms = []
MAX_STORED = 3

# SMS tampon
sms_buffer = ""
sms_ready = False

# Butonlar ve buzzer
buzzer = Pin(2, Pin.OUT)
buzzer.off()

helpB = Pin(4, Pin.IN, Pin.PULL_UP)
personB = Pin(5, Pin.IN, Pin.PULL_UP)

# LCD başlatma
try:
    i2c = I2C(0, sda=Pin(21), scl=Pin(22))
    adress = i2c.scan()
    lcd = I2cLcd(i2c, adress[0], 2, 16)
except:
    print("lcd yok")

# AT komutları gönder
def send_command(cmd, delay=150):
    uart.write(cmd + '\r\n')
    time.sleep_ms(delay)
    if uart.any():
        print(uart.read().decode())

# SMS gönderme fonksiyonu
def send_sms(number, message):
    uart.write('AT+CMGF=1\r\n')
    time.sleep(1)
    uart.write(f'AT+CMGS="{number}"\r\n')
    time.sleep(1)
    uart.write(message)
    uart.write(chr(26))
    time.sleep(3)

# SMS ayrıştırma
def split_sms(raw):
    try:
        lines = raw.split("\r\n")
        for i, line in enumerate(lines):
            if "+CMT" in line and i + 1 < len(lines):
                number = line.split('"')[1]
                message = lines[i + 1].strip()
                return number, message
    except Exception as e:
        print("Hata oluştu:", e)
    return None, None

def add_person(name, phone_number):
    try:
        with open("guide.json", "r") as file:
            data = ujson.load(file)

        # Aynı isim veya numara var mı kontrol et
        for person in data["persons"]:
            if person["name"].lower() == name.lower():
                return "isim zaten var"
            if person["pNumber"] == phone_number:
                return "numara zaten var"

        new_person = {"name": name, "pNumber": phone_number}
        data["persons"].append(new_person)

        with open("guide.json", "w") as file:
            ujson.dump(data, file)

        return "eklendi"
    except Exception as e:
        return "Kisi eklenemedi"

def remove_person(name):
    try:
        with open("guide.json", "r") as file:
            data = ujson.load(file)

        found = False
        for person in data["persons"]:
            if person["name"].lower() == name.lower():
                data["persons"].remove(person)
                found = True
                break

        if found:
            with open("guide.json", "w") as file:
                ujson.dump(data, file)
            return "silindi"
        else:
            return "bulunamadi"
    except Exception as e:
        return "silme hatasi"

# Başlat
send_command('AT')
send_command('AT+CMGF=1')
send_command('AT+CNMI=2,2,0,0,0')
print("proje başlatıldı")

while True:
    lcd.move_to(0, 0)
    lcd.putstr("YARDIM (3x)")
    lcd.move_to(1, 0)
    lcd.putstr("Kisiler")

    if uart.any():
        try:
            line = uart.readline()
            if line:
                line = line.decode("utf-8", "ignore").strip()
                print("Gelen veri:", line)

                if line.startswith("+CMT"): 
                    sms_buffer = line + "\r\n"
                elif sms_buffer:
                    sms_buffer += line
                    sms_ready = True

                if sms_ready:
                    number, message = split_sms(sms_buffer)
                    sms_ready = False
                    sms_buffer = ""

                    if number and message and number != "+905054936236":
                        unique_key = number + message
                        if unique_key not in processed_sms:
                            processed_sms.append(unique_key)
                            if len(processed_sms) > MAX_STORED:
                                processed_sms.pop(0)

                            print("Numara:", number)
                            print("Mesaj:", message)
                            parts = message.strip().split("/")

                            if len(parts) == 2 and parts[0].lower().strip() == "kayit":
                                new_person = parts[1].strip()
                                new_number = number.strip()
                                result = add_person(new_person, new_number)
                                print(result)
                                send_sms(number, f"{new_person} {result}")
                                lcd.clear()
                                lcd.putstr(f"{result}")
                                time.sleep(2)
                                lcd.clear()

                            elif len(parts) == 2 and parts[0].lower().strip() == "sil":
                                del_name = parts[1].strip()
                                result = remove_person(del_name)
                                print(result)
                                send_sms(number, f"{del_name} {result}")
                                lcd.clear()
                                lcd.putstr(f"{result}")
                                time.sleep(2)
                                lcd.clear()

                            else:
                                # Rehberde isim arama
                                try:
                                    with open("guide.json", "r") as f:
                                        data = ujson.load(f)
                                        name = None
                                        for person in data["persons"]:
                                            if person["pNumber"] == number:
                                                name = person["name"]
                                                break
                                except:
                                    name = None

                                lcd.clear()
                                lcd.move_to(0, 0)
                                if name:
                                    lcd.putstr(name[:16])  # İsim varsa onu yaz
                                else:
                                    lcd.putstr(number[-16:])  # İsim yoksa numaranın son 16 karakteri

                                lcd.move_to(1, 0)
                                lcd.putstr(message[:16])  # Mesajın ilk 16 karakterini yaz
                                time.sleep(2)
                                lcd.clear()

                        else:
                            print("Aynı SMS tekrar geldi, atlandı.")
                    else:
                        print("SMS çözümleme başarısız veya kendi mesajımız.")
        except Exception as e:
            print("Decode hatası:", e)

    if personB.value() == 0:
        with open("guide.json", "r") as f:
            values = ujson.load(f)
        for person in values["persons"]:
            lcd.clear()
            lcd.move_to(0, 0)
            lcd.putstr((person["name"] + " :")[:16])
            lcd.move_to(1, 0)
            lcd.putstr(person["pNumber"][:16])
            time.sleep_ms(800)
            lcd.clear()

    if helpB.value() == 0:
        lcd.move_to(0, 0)
        lcd.putstr("YARDIM (2x)")
        buzzer.on()
        time.sleep_ms(300)
        buzzer.off()
        time.sleep_ms(200)
        if helpB.value() == 0:
            lcd.move_to(0, 0)
            lcd.putstr("YARDIM (1x)")
            buzzer.on()
            time.sleep_ms(300)
            buzzer.off()
            time.sleep_ms(200)
            if helpB.value() == 0:
                buzzer.on()
                lcd.clear()
                lcd.move_to(0, 0)
                lcd.putstr("SMS yollaniyor")
                time.sleep(0.5)
                buzzer.off()
                with open("guide.json", "r") as f:
                    values = ujson.load(f)
                for person in values["persons"]:
                    send_sms(str(person["pNumber"]), "selamin aleykum")
                lcd.putstr("SMS yollandi")
                time.sleep(1)
                lcd.clear()

“send_sms” modülünde AT+CMGS cevabını incelediniz mi?

yardım tuşunu kullanınca bu çıktıyı verdi. Numara doğru ama sohbetteki ilk kişinin numarası
gözüküyor. sohbette mevcut 2 kişi var. Json yazımında bir sorun yok onuda en alta ekledim.

>>> %Run -c $EDITOR_CONTENT

MPY: soft reboot
AT
OK

AT+CMGF=1
OK

AT+CNMI=2,2,0,0,0
OK

proje başlatıldı
Gelen veri: AT+CMGF=1
Gelen veri: OK
Gelen veri: AT+CMGS="+90xxxxxxxxxx"
Gelen veri: > selamin aleykum
Gelen veri: 
Gelen veri: ERROR


json:

{"persons": [{"name": "yuzi", "pNumber": "+90xxxxxxxxxx"}, {"name": "isim", "pNumber": "+90xxxxxxxxxx"}]}

# SMS gönderme fonksiyonu
def send_sms(number, message):
    uart.write('AT+CMGF=1\r\n')
    time.sleep(1)
    uart.write(f'AT+CMGS="{number}"\r\n')
    time.sleep(1)
    uart.write(message)
    uart.write(chr(26))
    time.sleep(3)
    #muhtemelen:
    print(uart.read().decode())

Çoğunlukla AT komutları cevap verir. time.sleep(3) den sonra uart’ı okuyunuz ve AT+CMSG komutunun cevabına bakınız.
Ayrıca “send_command” metodunu yazmışsınız ama kullanmıyorsunuz.

test sırasında kablo kalabalığını engellemek için kodda biraz değişikliğe gittim.

from machine import UART, Pin, I2C
from i2c_lcd import I2cLcd
import time, ujson

# UART ayarları
uart = UART(2, baudrate=9600, tx=17, rx=16)

# Son işlenen SMS'leri tutan liste
processed_sms = []
MAX_STORED = 3

# SMS tampon
sms_buffer = ""
sms_ready = False

# Butonlar ve buzzer
buzzer = Pin(2, Pin.OUT)
buzzer.off()

helpB = Pin(4, Pin.IN, Pin.PULL_UP)
personB = Pin(5, Pin.IN, Pin.PULL_UP)

# LCD başlatma





# AT komutları gönder
def send_command(cmd, delay=150):
    uart.write(cmd + '\r\n')
    time.sleep_ms(delay)
    if uart.any():
        print(uart.read().decode())

# SMS gönderme fonksiyonu
# SMS gönderme fonksiyonu
def send_sms(number, message):
    uart.write('AT+CMGF=1\r\n')
    time.sleep(1)
    uart.write(f'AT+CMGS="{number}"\r\n')
    time.sleep(1)
    uart.write(message)
    uart.write(chr(26))
    time.sleep(3)
    print(uart.read().decode())

# SMS ayrıştırma
def split_sms(raw):
    try:
        lines = raw.split("\r\n")
        for i, line in enumerate(lines):
            if "+CMT" in line and i + 1 < len(lines):
                number = line.split('"')[1]
                message = lines[i + 1].strip()
                return number, message
    except Exception as e:
        print("Hata oluştu:", e)
    return None, None

def add_person(name, phone_number):
    try:
        with open("guide.json", "r") as file:
            data = ujson.load(file)

        # Aynı isim veya numara var mı kontrol et
        for person in data["persons"]:
            if person["name"].lower() == name.lower():
                return "isim zaten var"
            if person["pNumber"] == phone_number:
                return "numara zaten var"

        new_person = {"name": name, "pNumber": phone_number}
        data["persons"].append(new_person)

        with open("guide.json", "w") as file:
            ujson.dump(data, file)

        return "eklendi"
    except Exception as e:
        return "Kisi eklenemedi"

def remove_person(name):
    try:
        with open("guide.json", "r") as file:
            data = ujson.load(file)

        found = False
        for person in data["persons"]:
            if person["name"].lower() == name.lower():
                data["persons"].remove(person)
                found = True
                break

        if found:
            with open("guide.json", "w") as file:
                ujson.dump(data, file)
            return "silindi"
        else:
            return "bulunamadi"
    except Exception as e:
        return "silme hatasi"


try:
    i2c = I2C(0, sda=Pin(21), scl=Pin(22))
    adress = i2c.scan()
    lcd = I2cLcd(i2c, adress[0], 2, 16)
    # Başlat
    send_command('AT')
    send_command('AT+CMGF=1')
    send_command('AT+CNMI=2,2,0,0,0')
    print("proje başlatıldı")
    send_sms("+905525167640" , "sa")
    while True:
        lcd.move_to(0, 0)
        lcd.putstr("YARDIM (3x)")
        lcd.move_to(1, 0)
        lcd.putstr("Kisiler")

        if uart.any():
            try:
                line = uart.readline()
                if line:
                    line = line.decode("utf-8", "ignore").strip()
                    print("Gelen veri:", line)

                    if line.startswith("+CMT"):
                        sms_buffer = line + "\r\n"
                    elif sms_buffer:
                        sms_buffer += line
                        sms_ready = True

                    if sms_ready:
                        number, message = split_sms(sms_buffer)
                        sms_ready = False
                        sms_buffer = ""

                        if number and message and number != "+905054936236":
                            unique_key = number + message
                            if unique_key not in processed_sms:
                                processed_sms.append(unique_key)
                                if len(processed_sms) > MAX_STORED:
                                    processed_sms.pop(0)

                                print("Numara:", number)
                                print("Mesaj:", message)
                                parts = message.strip().split("/")

                                if len(parts) == 2 and parts[0].lower().strip() == "kayit":
                                    new_person = parts[1].strip()
                                    new_number = number.strip()
                                    result = add_person(new_person, new_number)
                                    print(result)
                                    send_sms(number, f"{new_person} {result}")
                                    lcd.clear()
                                    lcd.putstr(f"{result}")
                                    time.sleep(2)
                                    lcd.clear()

                                elif len(parts) == 2 and parts[0].lower().strip() == "sil":
                                    del_name = parts[1].strip()
                                    result = remove_person(del_name)
                                    print(result)
                                    send_sms(number, f"{del_name} {result}")
                                    lcd.clear()
                                    lcd.putstr(f"{result}")
                                    time.sleep(2)
                                    lcd.clear()

                                else:
                                    print("Komut eksik veya hatalı.")
                                    send_sms(number, "Hatalı komut.\nkayit/isim\nsil/isim")
                                    lcd.clear()
                                    lcd.putstr("Komut hatalı")
                                    time.sleep(2)
                                    lcd.clear()
                            else:
                                print("Aynı SMS tekrar geldi, atlandı.")
                        else:
                            print("SMS çözümleme başarısız veya kendi mesajımız.")
            except Exception as e:
                print("Decode hatası:", e)

        if personB.value() == 0:
            with open("guide.json", "r") as f:
                values = ujson.load(f)
            for person in values["persons"]:
                lcd.clear()
                lcd.move_to(0, 0)
                lcd.putstr((person["name"] + " :")[:16])
                lcd.move_to(1, 0)
                lcd.putstr(person["pNumber"][:16])
                time.sleep_ms(800)
                lcd.clear()

        if helpB.value() == 0:
            lcd.move_to(0, 0)
            lcd.putstr("YARDIM (2x)")
            buzzer.on()
            time.sleep_ms(300)
            buzzer.off()
            time.sleep_ms(200)
            if helpB.value() == 0:
                lcd.move_to(0, 0)
                lcd.putstr("YARDIM (1x)")
                buzzer.on()
                time.sleep_ms(300)
                buzzer.off()
                time.sleep_ms(200)
                if helpB.value() == 0:
                    buzzer.on()
                    lcd.clear()
                    lcd.move_to(0, 0)
                    lcd.putstr("SMS yollaniyor")
                    time.sleep(0.5)
                    buzzer.off()
                    with open("guide.json", "r") as f:
                        values = ujson.load(f)
                    for person in values["persons"]:
                        send_sms(str(person["pNumber"]), "selamin aleykum")
                    lcd.putstr("SMS yollandi")
                    time.sleep(1)
                    lcd.clear()
except :
    send_command('AT')
    send_command('AT+CMGF=1')
    send_command('AT+CNMI=2,2,0,0,0')
    print("proje başlatıldı")
    send_sms("+90552516xxxx" , "lutfen lcd takin")
    print("a")


çıktı olarak bunu aldım

>>> %Run -c $EDITOR_CONTENT

MPY: soft reboot
proje başlatıldı
AT+CMGS="+90552516xxxx"
ERROR

RDY

+CFUN: 1

+CPIN: READY
lutfen lcd takin
Call Ready

a
>>> 

Burayı inceleyiniz. Formatı kontrol ediniz , CR → \r olmaktadır. Siz hem \r hem de \n karakterini yolluyorsunuz.
Mesaj gönderilecek numara verildikten sonra > karakteri beklenmeli, gelirse mesaj yollanmalı.

yolladığınız urlyi inceledim ve koda biraz daha ekleme yaptım. son hali:

from machine import UART, Pin, I2C
from i2c_lcd import I2cLcd
import time, ujson

# UART ayarları
uart = UART(2, baudrate=9600, tx=17, rx=16)

# Son işlenen SMS'leri tutan liste
processed_sms = []
MAX_STORED = 3

# SMS tampon
sms_buffer = ""
sms_ready = False

# Butonlar ve buzzer
buzzer = Pin(2, Pin.OUT)
buzzer.off()

helpB = Pin(4, Pin.IN, Pin.PULL_UP)
personB = Pin(5, Pin.IN, Pin.PULL_UP)

# LCD başlatma





# AT komutları gönder
def send_command(cmd, delay=150):
    uart.write(cmd + '\r')
    time.sleep_ms(delay)
    if uart.any():
        print(uart.read().decode())

# SMS gönderme fonksiyonu
# SMS gönderme fonksiyonu
def send_sms(number, message):
    uart.write('AT+CMGF=1\r')
    time.sleep(1)
    uart.write(f'AT+CMGS="{number}"\r')
    time.sleep(1)
    uart.write(message)
    uart.write(chr(26))
    time.sleep(3)
    print(uart.read().decode())

# SMS ayrıştırma
def split_sms(raw):
    try:
        lines = raw.split("\r\n")
        for i, line in enumerate(lines):
            if "+CMT" in line and i + 1 < len(lines):
                number = line.split('"')[1]
                message = lines[i + 1].strip()
                return number, message
    except Exception as e:
        print("Hata oluştu:", e)
    return None, None

def add_person(name, phone_number):
    try:
        with open("guide.json", "r") as file:
            data = ujson.load(file)

        # Aynı isim veya numara var mı kontrol et
        for person in data["persons"]:
            if person["name"].lower() == name.lower():
                return "isim zaten var"
            if person["pNumber"] == phone_number:
                return "numara zaten var"

        new_person = {"name": name, "pNumber": phone_number}
        data["persons"].append(new_person)

        with open("guide.json", "w") as file:
            ujson.dump(data, file)

        return "eklendi"
    except Exception as e:
        return "Kisi eklenemedi"

def remove_person(name):
    try:
        with open("guide.json", "r") as file:
            data = ujson.load(file)

        found = False
        for person in data["persons"]:
            if person["name"].lower() == name.lower():
                data["persons"].remove(person)
                found = True
                break

        if found:
            with open("guide.json", "w") as file:
                ujson.dump(data, file)
            return "silindi"
        else:
            return "bulunamadi"
    except Exception as e:
        return "silme hatasi"


try:
    i2c = I2C(0, sda=Pin(21), scl=Pin(22))
    adress = i2c.scan()
    lcd = I2cLcd(i2c, adress[0], 2, 16)
    # Başlat
    send_command('AT')
    send_command('AT+CMGF=1')
    send_command('AT+CNMI=2,2,0,0,0')
    print("proje başlatıldı")
    send_sms("+90552516xxxx" , "sa")
    while True:
        lcd.move_to(0, 0)
        lcd.putstr("YARDIM (3x)")
        lcd.move_to(1, 0)
        lcd.putstr("Kisiler")

        if uart.any():
            try:
                line = uart.readline()
                if line:
                    line = line.decode("utf-8", "ignore").strip()
                    print("Gelen veri:", line)

                    if line.startswith("+CMT"):
                        sms_buffer = line + "\r\n"
                    elif sms_buffer:
                        sms_buffer += line
                        sms_ready = True

                    if sms_ready:
                        number, message = split_sms(sms_buffer)
                        sms_ready = False
                        sms_buffer = ""

                        if number and message and number != "+905054936236":
                            unique_key = number + message
                            if unique_key not in processed_sms:
                                processed_sms.append(unique_key)
                                if len(processed_sms) > MAX_STORED:
                                    processed_sms.pop(0)

                                print("Numara:", number)
                                print("Mesaj:", message)
                                parts = message.strip().split("/")

                                if len(parts) == 2 and parts[0].lower().strip() == "kayit":
                                    new_person = parts[1].strip()
                                    new_number = number.strip()
                                    result = add_person(new_person, new_number)
                                    print(result)
                                    send_sms(number, f"{new_person} {result}")
                                    lcd.clear()
                                    lcd.putstr(f"{result}")
                                    time.sleep(2)
                                    lcd.clear()

                                elif len(parts) == 2 and parts[0].lower().strip() == "sil":
                                    del_name = parts[1].strip()
                                    result = remove_person(del_name)
                                    print(result)
                                    send_sms(number, f"{del_name} {result}")
                                    lcd.clear()
                                    lcd.putstr(f"{result}")
                                    time.sleep(2)
                                    lcd.clear()

                                else:
                                    print("Komut eksik veya hatalı.")
                                    send_sms(number, "Hatalı komut.\nkayit/isim\nsil/isim")
                                    lcd.clear()
                                    lcd.putstr("Komut hatalı")
                                    time.sleep(2)
                                    lcd.clear()
                            else:
                                print("Aynı SMS tekrar geldi, atlandı.")
                        else:
                            print("SMS çözümleme başarısız veya kendi mesajımız.")
            except Exception as e:
                print("Decode hatası:", e)

        if personB.value() == 0:
            with open("guide.json", "r") as f:
                values = ujson.load(f)
            for person in values["persons"]:
                lcd.clear()
                lcd.move_to(0, 0)
                lcd.putstr((person["name"] + " :")[:16])
                lcd.move_to(1, 0)
                lcd.putstr(person["pNumber"][:16])
                time.sleep_ms(800)
                lcd.clear()

        if helpB.value() == 0:
            lcd.move_to(0, 0)
            lcd.putstr("YARDIM (2x)")
            buzzer.on()
            time.sleep_ms(300)
            buzzer.off()
            time.sleep_ms(200)
            if helpB.value() == 0:
                lcd.move_to(0, 0)
                lcd.putstr("YARDIM (1x)")
                buzzer.on()
                time.sleep_ms(300)
                buzzer.off()
                time.sleep_ms(200)
                if helpB.value() == 0:
                    buzzer.on()
                    lcd.clear()
                    lcd.move_to(0, 0)
                    lcd.putstr("SMS yollaniyor")
                    time.sleep(0.5)
                    buzzer.off()
                    with open("guide.json", "r") as f:
                        values = ujson.load(f)
                    for person in values["persons"]:
                        send_sms(str(person["pNumber"]), "selamin aleykum")
                    lcd.putstr("SMS yollandi")
                    time.sleep(1)
                    lcd.clear()
except :
    send_command('AT')
    send_command('AT+CMGF=1')
    send_command('AT+CNMI=2,2,0,0,0')
    send_command("AT+CMGS=?\r")
    send_command("AT+CSCA=?\r")
    print("proje başlatıldı")
    send_sms("+90552516xxxx" , "lutfen lcd takin")
    send_command("AT+CMGS:81")
    print("a")



bu da çıktısı:

>>> %Run -c $EDITOR_CONTENT

MPY: soft reboot
AT
OK

AT+CMGF=1
OK

AT+CNMI=2,2,0,0,0
OK

AT+CMGS=?
OK

AT+CSCA=?
OK

SMS Ready

proje başlatıldı
AT+CMGF=1
OK
AT+CMGS="+90552516xxxx"
> lutfen lcd takin
a
>>> 

halen sms alamadık. ancak sim800l nin kısmen de olsa çalıştığına eminim. sms atmak için kullanılan hatların yandığını düşünmeye başladık. sizce bunun olasılığı varmıdır. Birde bazen CSCA error dönüyor. ama çok sorun olacağını sanmıyorum. baştan başlatınca düzeliyor

Üstte yazdığım ikinci paragrafı yeniden okuyun. “>” karakterini bekleyeceksiniz.

kodda yine bir kaç bir şeyler ekledim. Ancak bu sim800l nin yanmış olma olasığına inanmamı kolaylaştırdı maalesef. artık program kararlı değil maalesef. bazen bütün sorgular error dönerken. bazen de program başladıktan sonra sorguları atlayıp kapanıyor. düzgün çalıştığındada sms atmıyor. ve en alta eklediğim çıktıyı veriyor.

kod:

from machine import UART, Pin, I2C
from i2c_lcd import I2cLcd
import time, ujson

# UART ayarları
uart = UART(2, baudrate=9600, tx=17, rx=16)

# Son işlenen SMS'leri tutan liste
processed_sms = []
MAX_STORED = 3

# SMS tampon
sms_buffer = ""
sms_ready = False

# Butonlar ve buzzer
buzzer = Pin(2, Pin.OUT)
buzzer.off()

helpB = Pin(4, Pin.IN, Pin.PULL_UP)
personB = Pin(5, Pin.IN, Pin.PULL_UP)

# LCD başlatma





# AT komutları gönder
def send_command(cmd, delay=150):
    uart.write(cmd + '\r')
    time.sleep_ms(delay)
    if uart.any():
        print(uart.read().decode())

# SMS gönderme fonksiyonu
# SMS gönderme fonksiyonu
def send_sms(number, message):
    try:
        uart.write('AT+CMGF=1\r')
        time.sleep(1)

        uart.write(f'AT+CMGS="{number}"\r')
        timeout = time.ticks_ms() + 5000  # Max 5 saniye bekle
        while time.ticks_ms() < timeout:
            if uart.any():
                response = uart.read().decode('utf-8', 'ignore')
                if '>' in response:
                    break
            time.sleep_ms(50)
        else:
            print("'>' mevcut değil")
            return

        uart.write(message)
        uart.write(chr(26))  # Ctrl+Z
        time.sleep(3)
        
        print(uart.read()) 
    except Exception as e:
        print(e)


# SMS ayrıştırma
def split_sms(raw):
    try:
        lines = raw.split("\r\n")
        for i, line in enumerate(lines):
            if "+CMT" in line and i + 1 < len(lines):
                number = line.split('"')[1]
                message = lines[i + 1].strip()
                return number, message
    except Exception as e:
        print("Hata oluştu:", e)
    return None, None

def add_person(name, phone_number):
    try:
        with open("guide.json", "r") as file:
            data = ujson.load(file)

        # Aynı isim veya numara var mı kontrol et
        for person in data["persons"]:
            if person["name"].lower() == name.lower():
                return "isim zaten var"
            if person["pNumber"] == phone_number:
                return "numara zaten var"

        new_person = {"name": name, "pNumber": phone_number}
        data["persons"].append(new_person)

        with open("guide.json", "w") as file:
            ujson.dump(data, file)

        return "eklendi"
    except Exception as e:
        return "Kisi eklenemedi"

def remove_person(name):
    try:
        with open("guide.json", "r") as file:
            data = ujson.load(file)

        found = False
        for person in data["persons"]:
            if person["name"].lower() == name.lower():
                data["persons"].remove(person)
                found = True
                break

        if found:
            with open("guide.json", "w") as file:
                ujson.dump(data, file)
            return "silindi"
        else:
            return "bulunamadi"
    except Exception as e:
        return "silme hatasi"


try:
    i2c = I2C(0, sda=Pin(21), scl=Pin(22))
    adress = i2c.scan()
    lcd = I2cLcd(i2c, adress[0], 2, 16)
    # Başlat
    send_command('AT')
    send_command('AT+CMGF=1')
    send_command('AT+CNMI=2,2,0,0,0')
    print("proje başlatıldı")
    while True:
        lcd.move_to(0, 0)
        lcd.putstr("YARDIM (3x)")
        lcd.move_to(1, 0)
        lcd.putstr("Kisiler")

        if uart.any():
            try:
                line = uart.readline()
                if line:
                    line = line.decode("utf-8", "ignore").strip()
                    print("Gelen veri:", line)

                    if line.startswith("+CMT"):
                        sms_buffer = line + "\r\n"
                    elif sms_buffer:
                        sms_buffer += line
                        sms_ready = True

                    if sms_ready:
                        number, message = split_sms(sms_buffer)
                        sms_ready = False
                        sms_buffer = ""

                        if number and message and number != "+905054936236":
                            unique_key = number + message
                            if unique_key not in processed_sms:
                                processed_sms.append(unique_key)
                                if len(processed_sms) > MAX_STORED:
                                    processed_sms.pop(0)

                                print("Numara:", number)
                                print("Mesaj:", message)
                                parts = message.strip().split("/")

                                if len(parts) == 2 and parts[0].lower().strip() == "kayit":
                                    new_person = parts[1].strip()
                                    new_number = number.strip()
                                    result = add_person(new_person, new_number)
                                    print(result)
                                    send_sms(number, f"{new_person} {result}")
                                    lcd.clear()
                                    lcd.putstr(f"{result}")
                                    time.sleep(2)
                                    lcd.clear()

                                elif len(parts) == 2 and parts[0].lower().strip() == "sil":
                                    del_name = parts[1].strip()
                                    result = remove_person(del_name)
                                    print(result)
                                    send_sms(number, f"{del_name} {result}")
                                    lcd.clear()
                                    lcd.putstr(f"{result}")
                                    time.sleep(2)
                                    lcd.clear()

                                else:
                                    print("Komut eksik veya hatalı.")
                                    send_sms(number, "Hatalı komut.\nkayit/isim\nsil/isim")
                                    lcd.clear()
                                    lcd.putstr("Komut hatalı")
                                    time.sleep(2)
                                    lcd.clear()
                            else:
                                print("Aynı SMS tekrar geldi, atlandı.")
                        else:
                            print("SMS çözümleme başarısız veya kendi mesajımız.")
            except Exception as e:
                print("Decode hatası:", e)

        if personB.value() == 0:
            with open("guide.json", "r") as f:
                values = ujson.load(f)
            for person in values["persons"]:
                lcd.clear()
                lcd.move_to(0, 0)
                lcd.putstr((person["name"] + " :")[:16])
                lcd.move_to(1, 0)
                lcd.putstr(person["pNumber"][:16])
                time.sleep_ms(800)
                lcd.clear()

        if helpB.value() == 0:
            lcd.move_to(0, 0)
            lcd.putstr("YARDIM (2x)")
            buzzer.on()
            time.sleep_ms(300)
            buzzer.off()
            time.sleep_ms(200)
            if helpB.value() == 0:
                lcd.move_to(0, 0)
                lcd.putstr("YARDIM (1x)")
                buzzer.on()
                time.sleep_ms(300)
                buzzer.off()
                time.sleep_ms(200)
                if helpB.value() == 0:
                    buzzer.on()
                    lcd.clear()
                    lcd.move_to(0, 0)
                    lcd.putstr("SMS yollaniyor")
                    time.sleep(0.5)
                    buzzer.off()
                    with open("guide.json", "r") as f:
                        values = ujson.load(f)
                    for person in values["persons"]:
                        send_sms(str(person["pNumber"]), "selamin aleykum")
                    lcd.putstr("SMS yollandi")
                    time.sleep(1)
                    lcd.clear()
except :
    send_command('AT')
    send_command('AT+CMGF=1')
    send_command('AT+CNMI=2,2,0,0,0')
    send_command("AT+CMGS=?\r")
    send_command("AT+CSCA=?\r")
    print("proje başlatıldı")
    send_sms("+90505495xxxx" , "lutfen lcd takin")
    send_command("AT+CMGS:81")
    print("a")


en normal ve doğru çalışan çıktı:

>>> %Run -c $EDITOR_CONTENT

MPY: soft reboot
AT
OK

AT+CMGF=1
OK

AT+CNMI=2,2,0,0,0
OK

AT+CMGS=?
OK

AT+CSCA=?
OK

proje başlatıldı
b'lutfen lcd takin\r\nSMS Ready\r\n\x00'
a
>>> 

Eğer bozulsa bu kadar çıktıyı vermez bence.
Ctrl-z den sonra bekleme komutunu iptal edin. Hemen cevabı okuyun.
Eğer +CMGS:81 cevabı geldiyse mesaj gönderilmiş demektir.
Bir de bu mesaj yollama işlemini direkt terminal üzerinden yapın. Cevaplar terminale yazar, kontrol edersiniz.

sms atmama sebepleri neler olabilir. çünkü gelen smsi algılıyor.

yeni çıktı:

>>> %Run -c $EDITOR_CONTENT

MPY: soft reboot
AT
OK

AT+CMGF=1
OK

AT+CNMI=2,2,0,0,0
OK

AT+CMGS=?
OK

AT+CSCA=?
OK

proje başlatıldı
None
lutfen lcd takinAT+CMGS:81
> 
a
>>> 

+CMGS:81 kodunu siz bekleyeceksiniz, yollamayacaksınız…
Teminalden (Örneğin: Thonny ile) alttakileri yazın ve cevapları kontrol ediniz:

uart.write(f'AT+CMGS="+90123..."\r')
# > işareti gelince:
uart.write("Mesaj")
uart.write(chr(26))
#bundan sonra ekranda +CMGS:81 yazarsa mesaj yollanmıştır.