在本文中,我们将构建一个红色,绿色和蓝色LED灯的电路,可以使用express.js + socket.io Web套接字服务器从Web应用程序进行控制。
电路原理图
在下面的电路中,我们将红色,蓝色和绿色的三个LED分别连接到1k欧姆寄存器。这些LED的另一端接地。每个LED通过GPIO引脚的1k欧姆寄存器获取功率。
红色LED连接到GPIO引脚BCM 26,绿色LED连接到GPIO引脚BCM 19,蓝色LED连接到GPIO引脚BCM13。该电路非常基础,如果您已阅读上一篇文章,请控制这些LED 是小菜一碟。
项目设置
简而言之,该想法是使用Web应用程序控制每个LED灯。 该Web应用程序基本上是一个具有三个按钮的网站,每个按钮分别用于红色,绿色和蓝色LED指示灯。 在浏览器中打开该网站时,它会连接到Raspberry Pi上托管的WebSocket服务器。
当用户单击按钮(在Web应用程序上)时,此Web应用程序将消息(事件)发送到WebSocket服务器,并且服务器可以基于此事件中包含的信息来控制GPIO引脚的状态。
首先,我们需要创建一些项目文件并安装一些项目依赖项。让我们创建一个项目目录并安装一些npm软件包。
通过以上命令,我们已经初始化了package.json文件,以跟踪我们的项目依赖项。 onoff包提供了一个高级API,用于与Raspberry Pi的GPIO进行通信。
express软件包提供了一个高级API,用于在Node.js中创建HTTP服务器以服务我们的Web应用程序,其中包括.html,.css和.js文件。它还将用于设置WebSocket服务器。
socket.io包提供了用于在Node.js中创建WebSocket服务器的API。 该软件包在服务器端(Node.js)上使用。 但是,socket.io-client提供了一个JavaScript文件,供Web应用程序(在浏览器中)与WebSocket服务器通信。
让我们浏览一下应用程序目录结构。
- led-control.js文件包含用于控制LED灯的GPIO逻辑。该文件导出server.js的API函数,这样我们就不必使用GPIO逻辑来膨胀server.js。
- server.js文件包含用于托管我们的Web应用程序的Express服务器和一个与该Web应用程序连接以侦听Web应用程序发送的自定义事件(如按钮按下)的WebSocket服务器。
- web-app / direcory包含我们的Web应用程序的资产。当用户在浏览器中打开特定的URL时,默认情况下将提供index.html HTML文件。它将style.css样式表导入样式按钮。
- main.js包含连接到WebSocket服务器并侦听DOM按钮单击事件的逻辑。它是由index.html导入的。
应用逻辑
既然我们已经完成了项目设置,那么我们继续编写上面文件中包含的实际逻辑。
GPIO设置
从上面的电路图中,我们需要控制三个引脚,每个引脚用于红色,绿色和蓝色LED灯。使用onoff包,我们可以轻松实现这一目标。
如前文所述,onoff封装使用BCM引脚编号系统。根据电路图,我们为LED灯的每种颜色分配了相应的引脚号。
我们导出了一个切换函数,该函数为每种颜色的光采用布尔值。根据这些值,将0或1写入相应的GPIO,使其输出3.3V或0V。
服务器设置
我们需要的下一步是HTTP和WebSocket服务器。
在上面的server.js文件中,我们导入了express和socket.io库。由于我们要从此文件控制GPIO,因此我们还从led-control.js文件导入了切换功能。
首先,我们需要创建一个HTTP服务器,它只是一个快速应用程序。 express()函数返回此类应用程序。
然后,我们需要设置一些路由来提供.html和其他资产文件。 在行号13上使用app.get(‘/’,handler)设置。 使用/ URL路径访问我们的Web应用程序的任何人都将获得位于web-app目录内的index.html文件。 我们还应确保发送正确的标头。
我们需要配置的下一件事是设置资产交付。由于我们的index.html文件需要web-app目录中的main.js和style.css文件,因此我们使用标准的express.js设置来交付资产。
Web应用程序中还需要socket.io.js文件才能与我们正在构建的SocketServer通信。 该文件位于node_modules / socket.io-client / dist目录中。 在行号 23上,我们指示express.js,如果在web-app目录中找不到资产文件,请在此目录中查找。
正确配置了Express应用程序后,我们需要从该应用程序创建一个HTTP服务器实例。在行号26上使用app.listen()调用,HTTP服务器从Raspberry Pi的9000端口启动。
Web应用程序
HTML代码
CSS代码
JavaScript代码
启动Web应用程序服务器和套接字服务器
详情参阅 - 亚图跨际