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()