tag 标签: 远程

相关博文
  • 热度 2
    2024-9-24 18:01
    475 次阅读|
    0 个评论
    本文简要介绍了搭建 EMQX 服务器实现基于 MQTT 协议远程控制 NodeMCU ESP8266 板载 LED 的解决方案。 简介 1. MQTT MQTT (Message Queuing Telemetry Transport)是一种基于 publish/subscribe (发布/订阅) 模式的 轻量级 通讯协议,构建于 TCP/IP 协议上,由 IBM 在1999年发布。 MQTT 可以实现用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务 。 2. EMQX EMQX 是一款大规模分布式物联网 MQTT 服务器,单集群支持 1 亿物联网设备连接,消息分发时延低于 1 毫秒。为高可靠、高性能的物联网实时数据移动、处理和集成提供动力。 3. Home Assistant Home Assistant (HA) 家庭助理,是一款基于 Python 的智能家居开源系统,可以方便地连接各种外部设备,支持众多品牌的智能家居设备。 方案 安装 Home Assistant 使用 Docker 容器安装 Home Assistant , 下载 Docker 软件; C 盘根目录新建文件夹 homeassistant ; 下载部署文件 GitHub 并解压得到 docker-compose.yml 保存至上述 homeassistant 文件夹; Windows 打开 命令提示符 或 Windows PowerShell ,输入如下代码实现自动下载镜像 cd C: \ homeassistant docker-compose . yml docker-compose up 安装过程需大约 30 分钟,即可在 Docker 容器中创建 Home Assistant 镜像; 自动从镜像安装 Home Assistant 到容器。代码文件 docker-compose.yml 将映射 Home Assistant 配置文件到 C:/homeassistant 文件夹; 浏览器输入网址 http://localhost:8123/ 进入Home Assistant 主界面,创建智能家居账号。 详见: How to run Home Assistant Container on Windows using Docker - Kiril Peyanski's Blog . 安装 EMQX 使用 EMQX 最简单的方式是在 EMQX Cloud 上创建完全托管的 MQTT 服务。 这里我们使用 Docker 运行 EMQX Windows 命令行或 PowerShell 输入并执行如下代码 docker run - d -- name emqx - p 1883 : 1883 - p 8083 : 8083 - p 8084 : 8084 - p 8883 : 8883 - p 18083 : 18083 emqx / emqx : latest 等待进度条下载和部署完成(大约5分钟),即可获得 EMQX 服务器。 Docker 内的 localhost 或 127.0.0.1 指向的是容器内部地址,如需访问宿主机地址请使用宿主机的真实 IP . 详见: Gitee . 配置 EMQX (1)浏览器打开网址 http://localhost:18083/ ,初始登录账户名 admin 密码 public ; (2)依次打开 访问控制 - 客户端认证 - 创建 - Password-Based - 内置数据库 - (默认配置)- 创建 ; (3) 用户管理 - 新建用户 - 自定义用户名和密码(建议 admin). 连接 EMQX 与 HA (1)命令行或 PowerShell 输入 ipconfig 获取本地计算机 IPv4 地址,如 42.34.25.153 (2)配置 Home Assistant ,依次点击设置 - 设备与服务 - 添加集成 - 搜索 MQTT - 填写代理信息。 代理栏输入计算机 IP 地址,端口 1883,用户名和密码为 EMQX 中创建的用户信息。 (3)点击 提交 后显示 成功创建 MQTT ,此时 集成 选项下出现 MQTT 条目,EMQX 网页 集群 的 总连接数 和 在线连接数 由 0 变为 1 ,表明 MQTT 设备已连接。 参考: MQTT 接入 Home Assistant . 连接 ESP8266 与 EMQX 将如下代码下载至 ESP8266 开发板, 需要注意 MQTT 服务器地址,若是 EMQX Cloud,则根据创建远程节点填写地址;若是本地计算机或Docker容器,则填写本地物理 IP 地址。 主题为 MQTTX 客户端定义的订阅名称,客户名和密码则对应 EMQX 服务器客户端用户定义。 #include #include ​ #define LED 2 // on-board LED D4 ​ // WiFi const char * ssid = "xxx" ; // Enter your WiFi name const char * password = "xxxxxx" ; // Enter WiFi password ​ // MQTT Broker const char * mqtt_broker = "xx.xx.xx.xx" ; // EMQX Server IP const char * topic = "emqx/esp8266" ; // MQTTX topic const char * mqtt_username = "UART" ; // EMQX Server User Name const char * mqtt_password = "123456" ; //EMQX Server User Password const int mqtt_port = 1883 ; ​ bool ledState = false ; ​ WiFiClient espClient ; PubSubClient client ( espClient ); ​ void setup () { // Set software serial baud to 115200; Serial . begin ( 115200 ); delay ( 1000 ); // Delay for stability ​ // Connecting to a WiFi network WiFi . begin ( ssid , password ); while ( WiFi . status () != WL_CONNECTED ) { delay ( 500 ); Serial . println ( "Connecting to WiFi..." ); } Serial . println ( "Connected to the WiFi network" ); ​ // Setting LED pin as output pinMode ( LED , OUTPUT ); digitalWrite ( LED , LOW ); // Turn off the LED initially ​ // Connecting to an MQTT broker client . setServer ( mqtt_broker , mqtt_port ); client . setCallback ( callback ); while ( ! client . connected ()) { String client_id = "esp8266-client-" ; client_id += String ( WiFi . macAddress ()); Serial . printf ( "The client %s connects to the public MQTT broker\n" , client_id . c_str ()); if ( client . connect ( client_id . c_str (), mqtt_username , mqtt_password )) { Serial . println ( "Public EMQX MQTT broker connected" ); } else { Serial . print ( "Failed with state " ); Serial . print ( client . state ()); delay ( 2000 ); } } ​ // Publish and subscribe client . publish ( topic , "hello emqx" ); client . subscribe ( topic ); } ​ void callback ( char * topic , byte * payload , unsigned int length ) { Serial . print ( "Message arrived in topic: " ); Serial . println ( topic ); Serial . print ( "Message: " ); String message ; for ( int i = 0 ; i < length ; i ++ ) { message += ( char ) payload ; // Convert *byte to string } Serial . print ( message ); if ( message == "on" && ! ledState ) { digitalWrite ( LED , LOW ); // Turn on the LED ledState = true ; } if ( message == "off" && ledState ) { digitalWrite ( LED , HIGH ); // Turn off the LED ledState = false ; } Serial . println (); Serial . println ( "-----------------------" ); } ​ void loop () { client . loop (); delay ( 100 ); // Delay for a short period in each loop iteration } 测试 在 MQTTX 客户端向目标主题发送控制文本 on 和 off 以控制板载 LED 注意发送文本格式选项更改为 Plaintext . Arduino IDE 的串口助手监控可以观察到反馈信息 与 MQTTX 客户端操作类似,在 HomeAssistant 的 MQTT 设置 中向目标主题发送消息,即可控制 LED 的亮灭 参考: ESP8266 + MQTT :如何实现 LED 灯的远程控制 | EMQ (emqx.com) 视频 ​ 总结 完成该项目的关键在于环境搭建,即 HomeAssistant 和 EMQX 服务器的安装,由于是在 Windows 操作系统环境下,需要将其安装于 Docker 容器中运行,而 Docker 软件通过检索实现镜像安装需要科学上网,因此环境搭建是关键。 此外,该项目可进行扩展连接智能家居平台 HomeAssistant ,同样安装于 Docker 容器,只需要进行 MQTT 配置即可实现开关可视化和 APP 远程 LED 控制,参考 文章 ,具体操作如下 修改 HA 配置文件 configuration.yaml 添加如下代码,实现 LED 开关 的界面可视化 # add light mqtt : light : # Device name - name : "On-board LED" # State topic state_topic : "emqx/esp8266" # Command topic command_topic : "emqx/esp8266" # Command type payload_on : "on" payload_off : "off" # unique_ID unique_id : "on-board LED" # optimistic set optimistic : false 配置文件 configuration.yaml 的路径根据 HA 安装位置确定 保存配置文件后,在 开发者工具 中点击 所有 YAML 配置 实现重载配置文件,效果如下 点击开关按钮即可实现 NodeMCU-ESP8266 板载 LED 的亮灭控制。
  • 热度 13
    2015-12-4 16:26
    1534 次阅读|
    0 个评论
      学会是使用远程登陆LINUX是很重要的几个技能   1、工作中你可以登陆到你家里的linux主机上,同样也可以在家登陆到公司的linux。很方便吧!   2、当然是便于维护linux系统了,小问题不用跑路出差。   本文介绍在window下远程登陆虚拟机中的linux:   解释:虽然两个系统都装在一个电脑下,但是通过IP地址访问,可以访问很远距离的主机。   可以远程登陆的前提条件:   1、可以ping 通 目标主机IP地址   2、目标主机关闭了Linux 的***:/etc/init.d/iptables stop   远程登陆linux有二种方式,分别是使用PUTTY-SSH、VNC   第一:使用PUTTY-SSH来远程登陆。   什么是SSH?   SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。   传统的网络服务程序,如FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。而 SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。透过 SSH 可以对所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗。SSH 之另一项优点为其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替 Telnet,又可以为FTP、POP、甚至为 PPP 提供一个安全的“通道”。   更加详细的资料请看百度百科:   http://baike.baidu.com/link?url=ds0yiZrvzalWqkltAD5_55gqgW9iOEWprZgt1pfN9SNP3rZHkUILXr3ap25rV1aKMQQ-Pqr8aNJD9qaboSnn_RjsuL_gFLxqaQ0of-FIa0W   这里是更深入一些的讲解和玩法(竟然可以登陆图形化界面):   http://blog.sina.com.cn/s/blog_4b885c2c0101l5kb.html   在网上下载一个PPUT 到Windows上,这个软件很方便,不用安装,直接打开使用。        输入主机名称或IP地址,一般输IP地址。端口22为默认,不要改动。   输入后点击打开,提示你login as :就是你登陆linux的身份,可以用root或是其他用户名        正确输入密码后就可以登陆        第二:使用VNC来登陆   什么是VNC?   VNC (Virtual Network Computer)是虚拟网络计算机的缩写。VNC 是一款优秀的远程控制工具软件,由著名的 ATT 的欧洲研究实验室开发的。VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和Windows 和 MAC 中的任何远程控制软件媲美。 在 Linux 中,VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。大多数情况下用户只需要其中的两个命令:vncserver 和 vncviewer。   下面链接是进一步解释什么是VNC以及安装配置方法   http://www.cnblogs.com/kerrycode/p/3315793.html   http://www.2cto.com/os/201110/109294.html   在RedHat6中使用VNC如下:   1、在linux下安装VNC service 软件包为:   2、tigervnc-server-1.0.90-0.17.20110314svn4359.el6.i686.rpm   3、安装完成后在终端中启动VNCservice 输入vncservice;此时会提示你首次开启设置密码,两次确认后就会弹出一串信息:        注意,关注那个数字5,再客户端输入想要登入的IP地址后加上“:5”;(我理解的是,这个是给你的一个登入图形界面的接口)        TQ210v6开发板:http://www.embedsky.com/index.php?s=/Product/show/id/80.html
  • 热度 27
    2014-12-15 17:54
    1325 次阅读|
    0 个评论
    概述   工具: 物联网云平台Yeelink  DHT11温湿度传感器   W5500EVB 编译环境: Keil4 目的: 通过以太网实时监控远程某个位置的温度和湿度 在W5500EVB端连接LED灯,通过W5500与网络连接,并与物联网云平台Yeelink中添加设备建立连接;之后系统会将读取的温度和湿度上传到物联网云平台Yeelink,这样就可以随时通过网络观察温度和湿度变化。 物联网云平台Yeelink还提供了一个简单的手机,登陆 Yeelink账号,也可以随时随地的观察温度和湿度的变化。 一、物联网云平台 Yeelink 物联网云平台Yeelink在之前发的帖子里有简单的介绍,官方网站也有详细的介绍,在此就不再多讲了。如果有问题的可以回复我,谢谢。 图1是设备添加号以后自动生成的一个开关模型,点击它可以控制LED灯的亮灭。   图1 开关设备   二、W5500简介 韩国WIZnet公司生产的以太网控制芯片W5500整合了五层结构中的前四层,即物理层、数据链路层、网络层和传输层,并在内部利用硬件实现了TCP/IP协议栈。开发者无需专业的网络知识,使用W5500如同控制外部存储器一样简单,为用户提供了最简单的网络接入方法。全硬件TCP/IP协议栈完全独立于主控芯片,可以降低主芯片负载且无需移植繁琐的TCP/IP协议栈,便于产品实现网络化更新。   以太网控制芯片W5500具有以下特点: 1、W5500支持硬件TCP/IP协议,包括TCP、UDP、ICMP、IPv4、ARP、IGMP、PPPoE和以太网的PHY和MAC层,TCP/IP协议的硬件实现,使得应用协议的实现更简单容易; 2、支持8个独立的SOCKET同时工作,可同时工作在不同的工作模式; 3、支持掉电模式,并支持网络唤醒,最大程度地减少功率消耗和发热; 4、支持高速SPI接口(SPI MODE 0,3),SPI的时钟最高可达到80MHz,极大地提高了网络通信的数据传输速率; 5、内部集成32KB存储器用于发送/接收缓存; 6、内嵌10BaseT/100BaseTX以太网物理层(PHY); 7、支持自动协商(10/100-Based全双工/半双工); 8、不支持IP分片; 9、工作电压为3.3V,但I/O信号口可承受5V电压; 10、具有多功能LED指示输出(全双工/半双工,网络连接,网络速度,活动状态等); 11、48引脚LQFP无铅封装(7x7mm, 0.5mm 间距)。   三、系统设计 1. 电路设计 电路很简单,在W5500EVB板上有STM32最小系统电路,所有引脚引出,我们只要在任何一个未被占用的端口接入一个LED登就可以。好多爱好者可能没有这个板子,不过没关系。淘宝上有好多W5500的模块,通过SPI方式于你们自己的最小系统连接,再在程序中相应的引脚对应好,就可以方便控制 2. 程序分析 char postT ={42,96,164,52};//  api.yeelink.net  的ip地址 继续阅读:http://www.iwiznet.cn/blog/?p=6677
  • 热度 19
    2014-9-11 17:54
    2475 次阅读|
    0 个评论
    译自:http://ricardo-dias.com/2010/11/20/arduino-wakes-my-pc/ 我一直梦想着通过网络控制我房间里的一些物件。在电脑上看IPTV,开/关灯,遥控P2P下载…完成这些,我需要一个服务器– 我的旧台式机倒是可以做到。当然,我不是故意晾着它 整天/周/月的…^^ 我需要在任何想要用的时候,找到复活它的办法。所以我想我可以用一个Arduino和以太网插板来发送 局域网唤醒包(来实现远程服务器开机)。   这个UdpRaw库可允许发送原始数据包,所以我要做的只是执行以下这个“魔法包(Magic Packet)” – 它由 6个0xFF及紧跟的16个目标MAC地址 组成。 byte wolMac ; int i,c1,j=0; for(i = 0; i 6; i++,j++){   all = 0xFF; } for(i = 0; i 16; i++){   for( c1 = 0; c1 6; c1++,j++)     all = wolMac ; } 运行这些代码之后,所有的这些阵列将获得完整的魔法包,预备发送: UdpRaw.sendPacket(all,102,targetIp,targetPort); 所以测试的话,我琢磨出了一个简单的程序,当按下一个按钮时,包就发送了。然后呢,我在pin 2上用了一个中断。Arduino基本能保持对那个引脚的侦听,无论从低到高,都将执行特定功能。     搞定上面之后,我计划用Arduino来侦听网络端口,当它接收到一个指定的包序列后,就唤醒电脑。这样就能在世界的任何有角落叫启动我的服务器了!      这是全部的Arduino 代码: /* * Arduino WakeMyPc  * Ricardo Dias  * http://ricardo-dias.com/  *  * This sketch sends the "magic packet" to wake up  * a PC on Local Area Network when a push-button  * is pressed.  */ #include Ethernet.h #include UdpRaw.h // ARDUINO CONFIG byte mac = { 192, 168, 1, 112 }; // Arduino IP byte gw = { 192, 168, 1, 255 }; int targetPort = 5456; byte wolMac ;   int i,c1,j=0;   for(i = 0; i 6; i++,j++){     all = 0xFF;   }   for(i = 0; i 16; i++){     for( c1 = 0; c1 6; c1++,j++)       all = wolMac ;   }   UdpRaw.sendPacket(all,102,targetIp,targetPort); } PS:你可能在想“见鬼为什么它不能直接把这些包发送到电脑上?” 可以这样解释:我的ISP喜欢在每天夜里2点重启路由器。那么路由器重启,服务器就down掉,它不知道服务器连着的是哪个以太网端口。为解决此问题,这些包需要发送到广播IP。然而,在局域网中才行。   与我们更多交流:wiznetbj@wiznet.co.kr 欢迎登陆WIZnet官方网站:http://www.iwiznet.cn
  • 热度 22
    2013-11-27 16:31
    1342 次阅读|
    0 个评论
    写在前面 以往在烧写芯片时,往往需要将芯片主板从系统中取出,离开电路后,才能用编程器烧写程序。也就是说芯片不能脱离系统而进行写入。 这个在众多应用环境中带来了很多的不便及困扰。比如:一些早期的STB机顶盒,还未有操作系统的涉入,但是如果系统程序需要做优化升级,但是产品早已发给客户端,挨家挨户的取做升级,显然是不太可能的事情。 这就引发了人们对于在线编程的探讨。 关键字:在线编程,ISP,IAR,固件更新,程序烧写,远程,TCP/IP,CATV; 应用探讨 很多时候, 我们很难将设备取下来并对其进行更新 : 气象站,交通控制系统,CATV光纤收/发器。 再或我们一些Arduino爱好者, 做的一些远程监控家中空气湿度、温度的小应用等等太多的设备,那么如能都应用远程更新固件就再方便不过了。 在室外,某些放置于高处的气象站的设备,不便于取下来, 而又不想丢失一部分气象数据;用于高压站或是不便操作地点附近的监控系统,或是交通系统中的道路监控;CATV的光纤收/发器,渐渐也走进千家万户,这么多的设备更新起来太麻烦了。 那么今天就为大家介绍我们开发的这款远程固件更新应用,为您解决这些问题! 那么如何能够实现‘不离线’,远程更新固件程序呢? 有关在线编程 常见的有两种在线编程技术——ISP和IAP ISP (在系统可编程),即逻辑器件不用脱离系统,就可以进行程序写入。 ISP实现起来相对容易,通常的做法是利用上位机软件通过串口来改写单片机的内部存储器。条件是单片机需要具备非易失性存储器,用来存储由上位机传来的程序和数据。实现ISP的硬件接口支持JTAG、串口、无线等等。该接口通常固化在单片机所在的电路板上,芯片烧写时无需返厂或技术人员亲临现场,用户只需要通过计算机上的RS232接口或者USB接口就可以自行改写程序。 IAP ( 在应用可编程),即逻辑器件不用脱离应用,就可以进行程序写入。 IAP实现起来相对要复杂一些,单片机内部需要有两个存储区,一块被称为BOOT区,一块被称为APP区。单片机上电后,首先运行在BOOT区,满足改写程序的条件时,则对APP区的程序进行改写操作,程序改写完成后,单片机重新启动;如果不满足改写程序的条件时,程序指针直接跳转到APP区,开始执行存放在APP区的程序。实现IAP的硬件接口支持串口、无线、网口等等。由于网口的原因,一方面工作人员可以不用亲临现场即可实现固件的远程更新,另一方面,可以通过以太网的广播、组播数据包实现多个用户的同时全部更新,节省人力物力资源。 远程固件更新程序应用原理 由于一些类型模块被固化在其他设备当中,因此我们想到开发这款应用程序——Nuri,来实现对该模块固件的远程更新,避免了繁琐复杂的手动连接。只要设备连接到网络,就能够对其进行设置或重置。同时,通过网络的广播和组播,还可实现对多个设备的同时更新,省时省力。 那么以 W5200E01-M3为例,给大家讲解在线更新固件的应用原理。 在W5200E01-M3中,通过ISP的方式来烧写BOOT程序。之后由BOOT程序远程更新APP程序时,采用的是IAP方式。 注:W5200E01-M3模块是一款嵌入W5200 (使用全硬件TCP/IP协议)开发板,单片机使用的是STM32F103CB(有128KB的FLASH存储空间),可以将固件程序存储在该存储器中。 上位机通过电缆与下位机相连。下位机进行数据预处理,组成一定的数据格式,通过RS-232串行口,将数据送到上位机,上位机采用串口终端方式接收数据,保证采集数据的实时处理。 那么在远程固件更新的过程中。PC机作为上位机,接收数据,进行固件程序的更新。 操作过程 操作过程就十分容易: (W5200E01-M3中已装载有固件boot.bin) 利用220V@AC~5V@DC电源适配器通过USB数据线为W5200E01-M3模块供电(或者直接通过USB数据线连接至电脑,为W5200E-M3模块提供稳定的5V电源)。同时,利用网线将该模块连接到以太网中。 然后,打开我们开发的应用程序ConfigTool_Nuri.exe,出现如下界面: 1  主程序界面 点击“Search”图标,进行设备搜索。找到设备后 设备信息即更新到“Device”,“Connection”和“Option”标签下。点开左侧串口转以太网下面的设备MAC地址前面的“加号”,可以查看该硬件设备的固件版本信息,如图所示,当前版本信息为0.1。 2  查看固件版本 接下来进行基本操作:更改设备IP地址和恢复出厂设置。 更改设备 IP 地址: 修改Device IP address中的内容为192.168.11.101,然后点击“Setting”图标,即完成了硬件设备的IP地址更改操作。设备的IP地址被设置为192.168.11.101。如下图所示 继续阅读:http://blog.iwiznet.cn/?p=5849 应用程序下载:http://pan.baidu.com/share/link?shareid=593485uk=1930353891 更多信息请关注WIZnet官方微博: http://weibo.com/wiznet2012  
相关资源