- أشياء يجب تذكرها قبل البدء
- المكونات مطلوبة
- مخطط الرسم البياني
- إعداد خادم SMTP2GO لإرسال البريد الإلكتروني
- برمجة AVR متحكم Atmega16 و ESP8266
- برمجة ATmega16 لإرسال البريد الإلكتروني
- برمجة ESP8266 NodeMCU
Atmega16 هو متحكم دقيق 8 بت منخفض التكلفة ويأتي مع عدد أكبر من GPIO من الإصدار السابق من ميكروكنترولر. يحتوي على جميع بروتوكولات الاتصال الشائعة الاستخدام مثل UART و USART و SPI و I2C. لديها تطبيقات واسعة في صناعات الروبوتات والسيارات والأتمتة بسبب دعمها المجتمعي الواسع وبساطتها.
لا يدعم Atmega16 أيًا من بروتوكولات الاتصال اللاسلكي مثل Wi-Fi و Bluetooth مما يحد من مجالات تطبيقه في مجال مثل IoT. للتغلب على هذا القيد ، يمكن ربط وحدات التحكم الأخرى التي تحتوي على بروتوكولات لاسلكية. هناك عدد من وحدات التحكم التي تدعم البروتوكولات اللاسلكية مثل ESP8266 المستخدمة على نطاق واسع ،
سنقوم اليوم بواجهة Atmega16 مع ESP8266 NodeMCU لجعلها تتصل لاسلكيًا عبر الإنترنت. ESP8266 NodeMCU هو وحدة WiFi شائعة الاستخدام مع دعم المجتمع والمكتبات المتاحة بسهولة. أيضًا ESP8266 NodeMCU قابل للبرمجة بسهولة باستخدام Arduino IDE. يمكن ربط ESP8266 بأي متحكم دقيق:
في هذا البرنامج التعليمي ، سيتم إرسال البريد الإلكتروني باستخدام وحدة ESP8266 NodeMCU و Atmega16. سيتم إعطاء التعليمات بواسطة Atmega16 وعندما يتلقى ESP8266 التعليمات ، سيرسل بريدًا إلكترونيًا إلى مستلم البريد الإلكتروني المحدد. سيتواصل ATmega16 و ESP8266 NodeMCU عبر الاتصال التسلسلي UART. على الرغم من أنه يمكن استخدام أي بروتوكول اتصال لواجهة ATmega16 و ESP8266 NodeMCU مثل SPI أو I2C أو UART.
أشياء يجب تذكرها قبل البدء
لاحظ أن متحكم Atmega16 المستخدم في هذا المشروع يعمل على مستوى منطق 5 فولت بينما يعمل ESP8266 NodeMCU على مستوى المنطق 3.3 فولت. تختلف المستويات المنطقية لكل من وحدات التحكم الدقيقة والتي يمكن أن تسبب بعض سوء الفهم بين Atmega16 و ESP8266 NodeMCU أو يمكن أن يكون هناك أيضًا فقدان للبيانات إذا لم يتم الحفاظ على مستوى المنطق المناسب.
ومع ذلك ، بعد الاطلاع على أوراق البيانات الخاصة بكل من وحدة التحكم الدقيقة ، وجدنا أنه يمكننا التفاعل دون أي تغيير في المستوى المنطقي لأن جميع دبابيس ESP8266 NodeMCU متسامحة من مستوى الجهد حتى 6 فولت. لذلك لا بأس بالمضي قدما بمستوى المنطق 5V. أيضًا ، تشير ورقة بيانات Atmega16 بوضوح إلى أن مستوى الجهد فوق 2 فولت يعتبر مستوى منطقي "1" وأن ESP8266 يعمل NodeMCU على 3.3 فولت ، فهذا يعني أنه إذا كان ESP8266 NodeMCU يرسل 3.3 فولت ، فيمكن أن يأخذها Atmega16 كمستوى منطقي "1". لذلك سيكون التواصل ممكنًا دون استخدام تغيير المستوى المنطقي. على الرغم من أنك حر في استخدام ناقل الحركة المنطقي من 5 إلى 3.3 فولت.
تحقق من جميع المشاريع ذات الصلة بـ ESP8266 هنا.
المكونات مطلوبة
- وحدة ESP8266 NodeMCU
- متحكم Atmega16 IC
- 16 ميجا هرتز الكريستال المذبذب
- اثنين من المكثفات 100nF
- مكثفتان 22pF
- اضغط الزر
- أسلاك توصيل
- اللوح
- USBASP v2.0
- Led (أي لون)
مخطط الرسم البياني
إعداد خادم SMTP2GO لإرسال البريد الإلكتروني
قبل بدء البرمجة ، نحتاج إلى خادم SMTP لإرسال البريد عبر ESP8266. هناك الكثير من خوادم SMTP المتاحة عبر الإنترنت. هنا ، سيتم استخدام smtp2go.com كخادم SMTP.
لذا قبل كتابة الرمز ، سيُطلب اسم مستخدم وكلمة مرور SMTP. للحصول على بيانات الاعتماد هاتين ، اتبع الخطوات أدناه والتي ستغطي إعداد خادم SMTP لإرسال رسائل البريد الإلكتروني بنجاح.
الخطوة 1: - انقر فوق "جرب SMTP2GO مجانًا" للتسجيل بحساب مجاني.
الخطوة 2: - ستظهر نافذة ، حيث تحتاج إلى إدخال بعض بيانات الاعتماد مثل الاسم ومعرف البريد الإلكتروني وكلمة المرور.
الخطوة 3: - بعد التسجيل ، سوف تتلقى طلب تنشيط على البريد الإلكتروني المدخل. قم بتنشيط حسابك من رابط التحقق في البريد الإلكتروني ، ثم قم بتسجيل الدخول باستخدام معرف البريد الإلكتروني وكلمة المرور.
الخطوة 4: - بمجرد تسجيل الدخول ، ستحصل على اسم مستخدم SMTP وكلمة مرور SMTP. تذكر أو انسخ هذه إلى المفكرة لمزيد من الاستخدام. بعد ذلك ، انقر فوق "إنهاء".
الخطوة 5: - الآن على شريط الوصول الأيسر ، انقر فوق "الإعدادات" ثم "المستخدمون". هنا ، يمكنك رؤية المعلومات المتعلقة بخادم SMTP ورقم المنفذ. عادة ما يكون على النحو التالي:
تشفير اسم المستخدم وكلمة المرور
الآن يتعين علينا تغيير اسم المستخدم وكلمة المرور بتنسيق base64 المشفر مع مجموعة أحرف ASCII. لتحويل البريد الإلكتروني وكلمة المرور بتنسيق base64 المشفر ، استخدم موقع ويب يسمى BASE64ENCODE (https://www.base64encode.org/). انسخ اسم المستخدم وكلمة المرور المشفرين ، لمزيد من الاستخدام:
بعد الانتهاء من هذه الخطوات ، تابع برمجة ESP8266 NodeMCU و Atmega16 IC.
برمجة AVR متحكم Atmega16 و ESP8266
ستتضمن البرمجة برنامجين ، أحدهما لـ Atmega16 للعمل كمرسل للتعليمات والثاني لـ ESP8266 NodeMCU ليكون بمثابة متلقي التعليمات. يتم تقديم كلا البرنامجين في نهاية هذا البرنامج التعليمي. يستخدم Arduino IDE لنسخ ESP8266 ومبرمج USBasp ويستخدم Atmel Studio لنسخ Atmega16.
يتم ربط زر ضغط و LED مع Atmega16 بحيث عندما نضغط على زر الضغط ، سيرسل Atmega16 التعليمات إلى NodeMCU و NodeMCU سيرسل البريد الإلكتروني وفقًا لذلك. سيُظهر مؤشر LED حالة نقل البيانات. لنبدأ برمجة Atmega16 ثم ESP8266 NodeMCU.
برمجة ATmega16 لإرسال البريد الإلكتروني
ابدأ بتحديد تردد التشغيل بما في ذلك جميع المكتبات اللازمة. المكتبة المستخدمة تأتي مع Atmel Studio Package.
#define F_CPU 16000000UL # تضمين # تضمين
بعد ذلك ، يجب تحديد سرعة البث بالباود من أجل التواصل مع ESP8266. لاحظ أن معدل البث بالباود يجب أن يكون مشابهًا لكل من وحدات التحكم ، أي Atmega16 و NodeMCU. في هذا البرنامج التعليمي ، معدل الباود هو 9600.
# تعريف BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
سيتم استخدام المسجلين UBRRL و UBRRH لتحميل قيم معدل الباود. سيتم تحميل أقل 8 بت من معدل البث بالباود في UBRRL وسيتم تحميل 8 بت العلوية من معدل البث بالباود في UBRRH. من أجل التبسيط ، اجعل وظيفة تهيئة UART حيث سيتم تمرير معدل الباود بالقيمة. ستتضمن وظيفة تهيئة UART ما يلي:
- ضبط بتات الإرسال والاستقبال في سجل UCSRB.
- اختيار أحجام الأحرف 8 بت في سجل UCSRC.
- تحميل البتات العلوية والسفلية من معدل الباود في سجل UBRRL و UBRRH.
UART_init باطل (طويل USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN) ؛ UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1) ؛ UBRRL = BAUD_PRESCALE ، UBRRH = (BAUD_PRESCALE >> 8) ، }
ستكون الخطوة التالية هي إعداد وظيفة لنقل الأحرف. تتضمن هذه الخطوة انتظار انتهاء المخزن المؤقت الفارغ ثم تحميل قيمة الحرف إلى سجل UDR. سيتم تمرير الحرف في الوظيفة فقط.
UART_TxChar باطل (حرف ج) { while (! (UCSRA & (1 <
بدلاً من نقل الأحرف ، أنشئ وظيفة لإرسال سلاسل كما هو موضح أدناه.
UART_sendString (char * str) باطل { unsigned char s = 0؛ بينما (str! = 0) { UART_TxChar (str) ؛ s ++ ؛ } }
في الوظيفة الرئيسية () ، اتصل بـ UART_init () لبدء الإرسال. و القيام صدى اختبار عن طريق إرسال سلسلة اختبار لNodeMCU.
UART_init (9600) ؛ UART_sendString ("TEST") ؛
ابدأ في تكوين دبوس GPIO لمصباح LED وزر الضغط.
DDRA - = (1 << 0) ؛ DDRA & = ~ (1 << 1) ؛ PORTA - = (1 << 1) ؛
في حالة عدم الضغط على زر الضغط ، استمر في تشغيل مؤشر LED وإذا تم الضغط على زر الضغط ، فابدأ في إرسال أمر "إرسال" إلى NodeMCU وجعل مؤشر LED مطفأ.
إذا (bit_is_clear (PINA، 1)) { PORTA - = (1 << 0) ؛ _delay_ms (20) ؛ } else { PORTA & = ~ (1 << 0) ؛ _delay_ms (50) ؛ UART_sendString ("إرسال") ؛ _delay_ms (1200) ؛ }
برمجة ESP8266 NodeMCU
تتضمن البرمجة NodeMCU استلام الأمر من Atmega16 وإرسال بريد إلكتروني باستخدام خادم SMTP واحد.
أولاً ، قم بتضمين مكتبة WIFI حيث سيتم استخدام الإنترنت لإرسال البريد الإلكتروني. حدد WIFI ssid وكلمة المرور للاتصال الناجح. حدد أيضًا خادم SMTP.
#تضمن
في وظيفة الإعداد () ، اضبط معدل الباود المماثل لمعدل البث بالباود Atmega16 على أنه 9600 واتصل بشبكة WIFI واعرض عنوان IP.
Serial.begin (9600) ؛ Serial.print ("الاتصال بـ:") ؛ Serial.println (ssid) ؛ WiFi.begin (SSID ، كلمة المرور) ؛ while (WiFi.status ()! = WL_CONNECTED) { delay (500) ؛ Serial.print (".") ؛ }
في دالة loop () ، اقرأ وحدات البايت المستقبلة في Rx pin وقم بتحويلها إلى شكل سلسلة.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100)؛ inChar = Serial.read () ، inData = inChar ؛ فهرس 1 ++ ؛ inData = '\ 0' ؛ } variable.toUpperCase () ؛ لـ (بايت i = 0 ؛ i <6 ؛ i ++) { variable.concat (String (inData)) ؛ } Serial.print ("المتغير =")؛ Serial.println (متغير) ؛ Serial.print ("indata =") ؛ Serial.println (inData) ؛ تأخير (20) ؛ } سلسلة سلسلة = سلسلة (متغير) ؛
إذا تمت مطابقة أمر الاستلام ، فأرسل بريدًا إلكترونيًا إلى المستلم عن طريق استدعاء وظيفة sendEmail ().
إذا (سلسلة == "إرسال") { sendEmail () ؛ Serial.print ("البريد المرسل إلى:") ؛ Serial.println ("المستلم") ؛ Serial.println ("") ؛ }
من المهم جدًا إعداد خادم SMTP وبدون القيام بذلك ، لا يمكن إرسال رسائل بريد إلكتروني. لاحظ أيضًا أنه أثناء الاتصال ، قم بتعيين معدل الباود مشابهًا لكل من وحدات التحكم.
لذلك هذه هي الطريقة التي يمكن ربطه ESP8266 مع AVR متحكم لتمكينه للاتصالات تقنيات عمليات. تحقق أيضًا من فيديو العمل الموضح أدناه.