当前位置: 首页 > news >正文

唐山做网站网站备案需要钱吗

唐山做网站,网站备案需要钱吗,hexo wordpress哪个好,网站管理助手建站最终效果 基于NodeMCU的物联网窗帘控制系统设计 项目介绍 该项目是“物联网实验室监测控制系统设计#xff08;仿智能家居#xff09;”项目中的“家电控制设计”中的“窗帘控制”子项目#xff0c;最前者还包括“物联网设计”、“环境监测设计”、“门禁系统设计计”和“小…最终效果 基于NodeMCU的物联网窗帘控制系统设计 项目介绍 该项目是“物联网实验室监测控制系统设计仿智能家居”项目中的“家电控制设计”中的“窗帘控制”子项目最前者还包括“物联网设计”、“环境监测设计”、“门禁系统设计计”和“小程序设计”等内容。本文只介绍“窗帘控制”部分。 项目功能实现的大致思路为当单片机接收到MQTT服务器传来的窗帘新位置时驱动步进电机转动使窗帘移动到指定位置。 硬件设计 接线 NodeMCU ULN2003 28BYJ-48 电源 OUT1 1 OUT2 2 OUT3 3 OUT4 4 D4 INT1 D3 INT2 D2 INT3 D1 INT4 5 5V GND - GND 成本 NodeMCU 28BYJ-48模组 27.9 8.53 其中共需36.5元左右来购买该项目所需的模块。此外还需1根数据线、若干杜邦线、能提供5~12V中间任意电压的电源。 机械模型搭建 为使演示更贴合实际本系统制作了一个窗帘模型模型图见下文。 模型左上方的黑色绝缘胶带表示窗帘的移动端位于左侧时表示窗帘闭合遮住窗户位于右侧时表示窗帘打开露出窗户。在模型中步进电机带动齿轮旋转从而带动传送带转动进而实现窗帘的移动。通过控制步进电机的旋转便可将窗帘移动至指定位置。该模型中的两齿轮中心距为800mm主动轮的周长约为74.61mm比两齿轮中心距的10%略小步进电机旋转10圈可将窗帘移动到另一侧窗帘行程留有冗余。 器件图 正面俯视图 正面右视图 正面左视图 正面右部分局部后视图 反面俯视图 器件尺寸 未完待续 皮带未完待续 28BYJ-48型步进电机的轴未完待续 木板未完待续 软件设计 本次的开发环境为Arduino IDE开发板型号为NodeMCU 0.9 (ESP-12 Module)。 本系统软件部分的流程如下图所示。在初始化之后等待小程序下发窗帘位置据此驱动步进电机旋转。 连接WiFi以及接收MQTT服务器传来的消息可参考利用ESP-01S中继实现STM32F103C8T6与MQTT服务器的串口双向通信_mqtt和stm32开发板通信-CSDN博客 解析JSON数据可参考Arduino中解析JSON数据-CSDN博客 驱动28BYJ-48型步进电机转动可参考NodeMCU驱动28BYJ-48型步进电机Arduino-CSDN博客 //选择NodeMCU 0.9 (ESP-12 module) #include ESP8266WiFi.h #include PubSubClient.h #include ArduinoJson.h #include Arduino.h// 设置wifi接入信息和MQTT服务器 const char* wifiname DOILMSBOIOT; const char* password doilmsboiot; const char* mqttServer broker.emqx.io;bool receive_message_flag 0; //1表示收到信息但还未处理0表示未收到信息或已处理WiFiClient wifiClient; PubSubClient mqttClient(wifiClient);// 待解析的json文件所需空间13~15个字节正好初始值为最多的字节若初始化时空间不足收到信息后无法赋值 String json {\curtain\:000};// 创建DynamicJsonDocument对象 const size_t capacity JSON_OBJECT_SIZE(1) 32 ; //1表示待解析的JSON对象中有1对数据32为解析过程中需要的额外空间可在此网站计算 https://arduinojson.org/v6/assistant/#/step1 DynamicJsonDocument doc(capacity);int curtain_position ; // 解析后的窗帘位置 int curtain_now_position 0 ; // 窗帘现在的位置void setup() {Serial.begin(9600); // 启动串口通讯WiFi.mode(WIFI_STA); //设置ESP8266工作模式为无线终端模式connectWifi(); // 连接WiFimqttClient.setServer(mqttServer, 1883); // 设置MQTT服务器和端口号mqttClient.setCallback(receiveCallback); // 设置MQTT订阅回调函数connectMQTTserver(); // 连接MQTT服务器stepmotor_initial(); //步进电机初始化 }void loop() {if (mqttClient.connected()) // 如果开发板成功连接服务器{ mqttClient.loop(); // 处理信息(收到信息后的回调函数)以及心跳} else // 如果开发板未能成功连接服务器{ connectMQTTserver(); // 则尝试连接服务器并订阅主题}if (receive_message_flag 1) //收到信息但还未处理{ deserializeJson(doc, json); // 反序列化数据// 解析收到的数据信息curtain_position doc[curtain].asint();if(curtain_position - curtain_now_position 0){Serial.print(电机要转到的位置);Serial.println(curtain_position);Serial.print(电机现在的位置);Serial.println(curtain_now_position);int cycle (int)(curtain_position - curtain_now_position)/10;Serial.println(开始转动);Serial.println(cycle);for(int i0; i cycle; i){clockwise_turn_one_circle();curtain_now_position 10;Serial.print(转过的圈数);Serial.println(i);} Serial.println(结束转动);Serial.print(电机现在的位置);Serial.println(curtain_now_position);Serial.println();}if(curtain_position - curtain_now_position 0){Serial.print(电机要转到的位置);Serial.println(curtain_position);Serial.print(电机现在的位置);Serial.println(curtain_now_position);int cycle (int)(curtain_now_position - curtain_position)/10;Serial.println(开始转动);Serial.println(-cycle);for(int i0; i cycle; i){anti_clockwise_turn_one_circle();curtain_now_position - 10;Serial.print(转过的圈数);Serial.println(i);} Serial.println(结束转动);Serial.print(电机现在的位置);Serial.println(curtain_now_position);Serial.println();}receive_message_flag 0; //已处理接收到的信息}}// 连接MQTT服务器并订阅主题 void connectMQTTserver() {// 根据ESP8266的MAC地址生成客户端ID避免与其它ESP8266的客户端ID重名String clientId esp8266- WiFi.macAddress();if (mqttClient.connect(clientId.c_str())) //如果成功连接MQTT服务器{ Serial.print(MQTT Server Has Connected. );Serial.print(Server Address: );Serial.println(mqttServer);Serial.print(ClientId: );Serial.println(clientId);subscribeTopic(); // 订阅指定主题} else {Serial.print(MQTT Server Connect Failed. Client State:);Serial.println(mqttClient.state());delay(3000);} }// 收到信息后的回调函数 void receiveCallback(char* topic, byte* payload, unsigned int length) {Serial.print(Message with the topic of [ );Serial.print(topic);Serial.println( ] has been received.);Serial.print(Content: );for (int i 0; i length; i) {Serial.print((char)payload[i]);json[i] (char)payload[i]; //将收到的信息赋给json以便后续解析和发射信号}Serial.println();for (int i length; i 15; i) //清除掉多余字符{json[i] \0;}receive_message_flag 1; //表示收到信息但还未处理Serial.print(Message Length (Bytes) : );Serial.println(length);Serial.println( ); }// 订阅指定主题 void subscribeTopic() {String topicString deviceControl3/curtain; // 订阅主题的名称char subTopic[topicString.length() 1]; strcpy(subTopic, topicString.c_str());if(mqttClient.subscribe(subTopic)) //如果成功订阅主题{Serial.print(Subscrib Topic: );Serial.println(subTopic);Serial.println();} else {Serial.print(Subscribe Fail...);} }// ESP8266连接wifi void connectWifi() {WiFi.begin(wifiname, password);Serial.println(Connecting to WiFi);while (WiFi.status() ! WL_CONNECTED) //等待WiFi连接,当wifi未连接时,持续输出.;成功连接后输出连接成功信息{delay(1000);Serial.print(.);}Serial.println();Serial.println(WiFi Connected!); Serial.println(); }void stepmotor_initial() {pinMode(D1, OUTPUT);pinMode(D2, OUTPUT); pinMode(D3, OUTPUT);pinMode(D4, OUTPUT); }void clockwise_turn_one_circle() {for(int i0;i512;i){digitalWrite(D1, HIGH);digitalWrite(D2, LOW);digitalWrite(D3, LOW);digitalWrite(D4, LOW);delay(1);digitalWrite(D1, HIGH);digitalWrite(D2, HIGH);digitalWrite(D3, LOW);digitalWrite(D4, LOW);delay(1);digitalWrite(D1, LOW);digitalWrite(D2, HIGH);digitalWrite(D3, LOW);digitalWrite(D4, LOW);delay(1);digitalWrite(D1, LOW);digitalWrite(D2, HIGH);digitalWrite(D3, HIGH);digitalWrite(D4, LOW);delay(1);digitalWrite(D1, LOW);digitalWrite(D2, LOW);digitalWrite(D3, HIGH);digitalWrite(D4, LOW);delay(1);digitalWrite(D1, LOW);digitalWrite(D2, LOW);digitalWrite(D3, HIGH);digitalWrite(D4, HIGH);delay(1);digitalWrite(D1, LOW);digitalWrite(D2, LOW);digitalWrite(D3, LOW);digitalWrite(D4, HIGH);delay(1);digitalWrite(D1, HIGH);digitalWrite(D2, LOW);digitalWrite(D3, LOW);digitalWrite(D4, HIGH);delay(1);} }void anti_clockwise_turn_one_circle() {for(int i0;i512;i){digitalWrite(D1, LOW);digitalWrite(D2, LOW);digitalWrite(D3, LOW);digitalWrite(D4, HIGH);delay(1);digitalWrite(D1, LOW);digitalWrite(D2, LOW);digitalWrite(D3, HIGH);digitalWrite(D4, HIGH);delay(1);digitalWrite(D1, LOW);digitalWrite(D2, LOW);digitalWrite(D3, HIGH);digitalWrite(D4, LOW);delay(1);digitalWrite(D1, LOW);digitalWrite(D2, HIGH);digitalWrite(D3, HIGH);digitalWrite(D4, LOW);delay(1);digitalWrite(D1, LOW);digitalWrite(D2, HIGH);digitalWrite(D3, LOW);digitalWrite(D4, LOW);delay(1);digitalWrite(D1, HIGH);digitalWrite(D2, HIGH);digitalWrite(D3, LOW);digitalWrite(D4, LOW);delay(1);digitalWrite(D1, HIGH);digitalWrite(D2, LOW);digitalWrite(D3, LOW);digitalWrite(D4, LOW);delay(1);digitalWrite(D1, HIGH);digitalWrite(D2, LOW);digitalWrite(D3, LOW);digitalWrite(D4, HIGH);delay(1);} } 不足之处 电机转速太慢缺少获取窗帘当前位置的功能无法处理手动和打滑。
http://www.w-s-a.com/news/236621/

相关文章:

  • 2018新网站做外链app制作的网站
  • 外贸网站建设怎么建设pc网站做移动端适配
  • 做经销找厂家好的网站个人备案网站可以做电影站吗
  • 网站搭建怎么做网站建设培训哪家好
  • 学做美食的视频网站企业网站备案密码怎么找回
  • 销售产品做单页还是网站seo有哪些作用
  • 网站视觉规范南宁网站优化推广
  • 公司起名打分最准的免费网站学设计的学校
  • 用cn作网站行么WordPress网站打不开nginx
  • 顺德龙江网站建设百货商城自助下单网站
  • 门户网站采用较多的模式是wordpress自动搜索缩略图
  • 深圳设计功能网站做网站推广怎么做
  • 海口专业网站建设地址wordpress站点标题是什么
  • 青岛做网站那家好网页素材网
  • 宁夏银川做网站的公司网络营销有哪些推广方法
  • 免费域名网站哪个最好东莞企业网站排名
  • dz做网站网址模版
  • 做外贸网站平台中华室内设计师网
  • 三大网络架构seo是啥职业
  • 一个域名可以做中英文两个网站吗搜索引擎营销的6种方式
  • 可以做ppt的网站天津网站建设怎么样
  • 网站怎么做的qq邮件订阅浙江省住房和城乡建设厅网站查询
  • 主机屋网站在线做图片
  • 河南省城乡住房建设厅网站wordpress登陆密码
  • 漳州做网站的公司搭建网站多少时间
  • 网站开发实习计划模板微营销手机
  • 网站设计与制作是做什么工作免费封面设计在线制作生成
  • 网站开发的教学课程网站广告调词软件
  • 进下加强新闻宣传网站建设入门 做网站 书籍
  • 电商网站主题photolux wordpress