کنترل سروو موتور با MQTT و Node_RED
سلام در این جلسه قصد داریم با استفاده از پروتکل MQTT و نرم افزار Node_RED و با برد NodeMCU یک عدد سروو موتور رو کنترل کنیم .
در این پروژه ما از مبحث PWM استفاده میکنیم .
با دادن عدد بین ۰ تا ۱۸۰ به برد NodeMCU زاویه سروو موتور رو کنترل میکنیم.
اول سرور MQTT و Node_RED رو اجرا میکنیم و بعد به پلتفرم برنامه نویسی بلوکی ۴ADAIOT میریم و شروع به کد نویسی میکنیم.
پلتفرم برنامه نویسی بلوکی :
پلتفرم برنامه نویسی بلوکی ۴ADAIOT
شماتیک و اتصالات:
پایه مثبت یا قرمز سروو موتور = پایه VIN برد NodeMCU
پایه منفی یا قهوه ای سروو موتور = پایه GND برد NodeMCU
پایه PWM یا نارنجی سروو موتور = پایه D4 برد NodeMCU
نحوه قرار دادن بلوک ها در پلتفرم برنامه نویسی بلوکی ۴ADAIOT:
از قسمت پروژه های آماده پروژه MQTT CLIENT رو انتخاب میکنیم و بعد بلوک های دریافت دیتا و نوشتن PWM رو اضافه میکنیم.
از ابتدای برنامه نام وایفای و رمز عبور و آدرس سرور رو وارد میکنیم .
در بلوک معرفی تاپیک دریافت دیتا نام تاپیک میتونه دلخواه باشه اما باید اسمی باشه که به یادتون بمونه چون داخل نرم افزار Node_RED برای ارسال دیتا از همین اسم تاپیک استفاده میکنیم.
ما اینجا اسم تاپیک رو servo گذاشتیم شما هر اسمی که دوست داشتید میتونید در نظر بگیرید فرقی نمیکنه.
کد ساخته شده توسط پلتفرم برنامه نویسی بلوکی ۴ADAIOT:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ ۴۹ ۵۰ ۵۱ ۵۲ ۵۳ ۵۴ ۵۵ ۵۶ ۵۷ ۵۸ ۵۹ ۶۰ ۶۱ ۶۲ ۶۳ ۶۴ ۶۵ ۶۶ ۶۷ ۶۸ ۶۹ ۷۰ ۷۱ ۷۲ ۷۳ |
///////////////////////////////// // Generated with a lot of love// // with 4ADAIOT FOR ESP8266 // // Website: https://4adateam.com // ///////////////////////////////// #include <ESP8266WiFi.h> #include <PubSubClient.h> #include <Servo.h> WiFiClient espClient; PubSubClient client(espClient); void reconnectmqttserver() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); if (client.connect(clientId.c_str())) { Serial.println("connected"); client.subscribe("نام تاپیک"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(۵۰۰۰); } } } Servo servo_2; void callback(char* topic, byte* payload, unsigned int length) { String MQTT_DATA = ""; for (int i=۰;i<length;i++) { MQTT_DATA += (char)payload[i];} servo_2.write(MQTT_DATA.toFloat()); delay(۵۰); } void setup() { Serial.begin(۹۶۰۰); WiFi.disconnect(); delay(۳۰۰۰); Serial.println("START"); WiFi.begin("نام وایفای","رمزعبور"); while ((!(WiFi.status() == WL_CONNECTED))){ delay(۳۰۰); Serial.print(".."); } Serial.println("Connected"); Serial.println("Your IP is"); Serial.println((WiFi.localIP().toString())); client.setServer("آدرس سرور", ۱۸۸۳); client.setCallback(callback); servo_2.attach(۲); } void loop() { if (!client.connected()) { reconnectmqttserver(); } client.loop(); } |
برنامه نویسی در نرم افزار Node_RED: