import network
import time
from machine import Pin, ADC
import socket

# معلمات ThingSpeak
THINGSPEAK_WRITE_API_KEY = "K9ANCT215BYGFOBC"  # استبدل بـ API Key الخاص بك
THINGSPEAK_HOST = "api.thingspeak.com"
THINGSPEAK_URL = "/update"

# حساس رطوبة التربة
soil_moisture_pin = ADC(Pin(36))  # ADC1_CH0
soil_moisture_pin.atten(ADC.ATTN_11DB)  # المدى الكامل: من 0 إلى 3.3 فولت

# دبابيس الري
relay = Pin(26, Pin.OUT)
relay.off()  # بدءًا من إيقاف تشغيل الري

# دبابيس LED
led = Pin(26, Pin.OUT)  # LED مدمج أو LED خارجي
led.off()  # بدءًا من إيقاف تشغيل LED

# الاتصال بالشبكة اللاسلكية
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')  # استبدل باسم الشبكة وكلمة المرور
while not sta_if.isconnected():
    print(".", end="")
    time.sleep(0.1)
print(" Connected!")

# إعداد الاتصال بـ ThingSpeak باستخدام socket
def send_to_thingspeak(moisture_value, relay_status, led_status):
    # إضافة طباعة للتأكد من القيم المرسلة
    print(f"Sending to ThingSpeak: Moisture={moisture_value}, Relay={relay_status}, LED={led_status}")
    
    payload = "api_key={}&field1={}&field2={}&field3={}".format(
        THINGSPEAK_WRITE_API_KEY, moisture_value, relay_status, led_status)
    
    print("Payload:", payload)  # إظهار الـ payload المرسل
    
    addr = socket.getaddrinfo(THINGSPEAK_HOST, 80)[0][-1]
    s = socket.socket()
    s.connect(addr)
    
    request = "GET {}?{} HTTP/1.1\r\nHost: {}\r\nConnection: close\r\n\r\n".format(
        THINGSPEAK_URL, payload, THINGSPEAK_HOST)
    
    s.send(request.encode())
    response = s.recv(1024)
    print("ThingSpeak Response:", response)
    s.close()

# إرسال البيانات إلى ThingSpeak
prev_moisture = -1
while True:
    # قراءة قيمة رطوبة التربة
    moisture_value = soil_moisture_pin.read()
    print("Soil Moisture Value:", moisture_value)

    # تشغيل/إيقاف الري وLED بناءً على مستوى الرطوبة
    if moisture_value < 1500:  # قم بتعديل الحد حسب الحاجة
        relay.on()  # تشغيل الريال
        led.on()    # تشغيل LED
        relay_status = "ON"
        led_status = "ON"
        print("Relay ON: Soil is dry, LED ON")
    else:
        relay.off()  # إيقاف الريال
        led.off()    # إيقاف LED
        relay_status = "OFF"
        led_status = "OFF"
        print("Relay OFF: Soil is wet, LED OFF")

    # إرسال البيانات إلى ThingSpeak
    if moisture_value != prev_moisture:
        print("Reporting to ThingSpeak: Moisture =", moisture_value)
        send_to_thingspeak(moisture_value, relay_status, led_status)
        prev_moisture = moisture_value

    time.sleep(15)  # يسمح ThingSpeak بتحديث البيانات كل 15 ثانية
NOCOMNCVCCGNDINLED1PWRRelay Module