سلام
چند روز پیش طبق معمول در حال کد نویسی بودم که این ایده که ارتباط کامپیوتر با nodemcu رو با TCP Socket برقرار کنم که از این طریق باهم تبادل اطلاعات کنن یا به عبارت دیگه ما با پایتون از طریق کامپیوتر به بردمون دستور بدیم.
با چندتا سرچ به نتیجه مطلوبم نرسیدم ، پس خودم شروع کردم و دست به کد شدم 😃
خوب، بریم سراغ کد
اول آردوینو:
من برای پیاده سازی این کد از برد NodeMCU استفاده میکنم که مبتنی بر ESP8266 هست.
اگر شما این برد رو روی Arduino IDE نصب کرده باشین به کتابخانه خاص دیگه احتیاج نداریم.
در قسمت اول کتابخانه های مورد نیاز رو اضافه میکنیم:
1 2 3 |
#include <Arduino.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> |
در این قسمت PORT رو با پورتی که تو کد پایتون مشخص کردیم و به جای IP ، ای پی سیستممون روجایگزین میکنیم:
1 2 |
const uint16_t port = PORT; const char *host = "IP"; |
و بقیه کد واضح هست و احتیاجی به توضیح نداره،فقط فراموش نکنید که ussid و password مودم خودتون رو بزارید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
WiFiClient client; void setup() { Serial.begin(115200); Serial.println("Connecting...\n"); WiFi.mode(WIFI_STA); WiFi.begin("USSID", "PASSWORD"); // change it to your ussid and password while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } } void loop() { if (!client.connect(host, port)) { Serial.println("Connection to host failed"); delay(1000); return; } Serial.println("Connected to server successful!"); client.println("Hello From ESP8266"); delay(250); while (client.available() > 0) { char c = client.read(); Serial.write(c); } Serial.print('\n'); client.stop(); delay(5000); } |
و درنهایت کد پایتون ، فراموش نکنین که پورت تو این کد و کد آردینو یکی باشه،درغیر این صورت برنامه کار نمیکنه.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import socket import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('0.0.0.0', PORT )) s.listen(0) while True: client, addr = s.accept() client.settimeout(5) while True: content = client.recv(1024) if len(content) ==0: break if str(content,'utf-8') == '\r\n': continue else: print(str(content,'utf-8')) client.send(b'Hello From Python') client.close() |