×

在Raspberry Pi上通过网络控制LED

消耗积分:0 | 格式:zip | 大小:0.40 MB | 2022-12-13

李明

分享资料个

描述

嗨,这是我第一个使用 Raspberry Pi 的项目,我想做一些非常简单的事情,但是在许多应用程序中使用一些非常重要的工具。因为我刚开始,我选择使用 LED,因为我认为这是其中之一开始学习做很多伟大项目的最佳方式,因为它们也用于许多应用程序。

首先,我将对一个LED做一个总结

发光二极管是一种用于提供视觉反馈的组件,因为它们消耗的电量很少,而且可以永远持续使用(除非你烧掉它们)。最常见的 LED 类型之一是我使用的 5 毫米红色 LED。LED 总是与一个电阻串联使用,以限制流过它的电流量,否则它会烧坏并你无法修复它。

重要的

当您为 LED 供电时,极性很重要。这意味着您必须正确识别阳极(LED的正极引线)和阴极(LED的负极引线)

poYBAGOGs86AQsDpAAAPxJP9EA8874.png
 

在这个项目中,我决定使用 3 个这样的 LED,为了让它更有趣,我还选择使用 RGB LED 从网页上控制它。

RGB LED

RGB LED 与普通 LED 非常相似,但它们发出多种颜色,而不是一种颜色。基本上,RGB LED 由 3 个 LED 组成。它们通常有 2 个版本:共阳极或共阴极。公共引脚通常是最长的。共阳极意味着所有 LED 都使用一根正极线(通常为 3.3 V 或 5 V)。另一方面,共阴极意味着一条地线由所有 LED 共享。它们具有共阳极或共阴极,以减少使用的引脚,从 6 个引脚到只有 4 个引脚。在这种情况下,我RGB LED 有一个共阴极。

pYYBAGOXz2uAL7QsAAAZMewZC80377.png
 

第 1 步:连接

首先,我将向您展示一个 LED 的连接,因为其他 LED 的连接是相同的。您将在最终图中看到其余部分。

  • 首先在面包板上连接一个 LED。
  • 放置 LED 后,将电阻器插入威廉希尔官方网站 板,一端与 LED 的阴极(短)腿在同一水平行,另一端向下几行。电阻器没有极化,因此插入它的方向无关紧要。
  • 将同一列中 Raspberry Pi 引脚 6(接地)的跳线与电阻器的另一端连接起来
  • 现在将引脚 11 (GPIO 17) 连接在与 LED 阳极相同的水平行中。
pYYBAGOXz3GABibuAAJ8hJykAc4181.png
 

对于其他 LED 和 RGB,我们遵循相同的步骤。后者的不同之处在于,我们只有一个 LED,而不是 3 个 LED 产生 3 种不同的颜色,而是一个共阴极。

第 2 步:WiringPi 库

WiringPi 是一个基于 PIN 的 GPIO 访问库,用 C 语言编写,适用于所有 Raspberry Pi 版本中使用的 BCM2835、BCM2836 和 BCM2837 SoC 设备。它在 GNU LGPLv3 许可下发布,可用于 C、C++ 和 RTB (BASIC) 以及许多其他具有合适包装器的语言。

WiringPi 现在预装了标准 Raspbian 系统。要检查您的版本,请在终端中输入:

gpio -v

第 3 步:安装 Apache Web 服务器

正如我之前告诉过你的,我在许多项目和物联网应用程序中使用了一些基本工具。其中之一是 Apache Web 服务器。

Apache 是使用最广泛的 Web 服务器软件,旨在创建能够托管一个或多个基于 HTTP 的网站的 Web 服务器。可以通过操作代码库或添加多个扩展/附加组件来增强 Apache Web 服务器。在我们的项目中,我们使用的是 HTTP 服务器及其 PHP 扩展。

对于这个应用程序,我选择不在我的 Raspberry Pi 上创建一个全局服务器。一方面,我的互联网连接不是很好,并且从任何网络访问我的 Raspberry Pi 可能不会每次都工作或非常快。在另一方面,让我的网络可以从 Internet 上的任何地方访问意味着我将在 Internet 上公开它,所以任何人都可以访问它。这不像我会被黑客入侵,但我宁愿不这样做。如果你愿意到,我强烈建议保护您的 Raspberry Pi。此外,我没有相机可以附加到这个项目上,以查看 LED 是否在我的页面命令上工作,因此拥有一个全局的没有多大意义服务器。

现在要安装Apache Web 服务器,我们将使用以下命令:

首先,更新可用的软件包:

sudo apt-get update

然后,使用以下命令安装apache2包:

sudo apt-get install apache2 -y

要测试 Web 服务器是否正常工作,请转到浏览器并在选项卡中输入 Pi 的 IP 地址。要查找 Pi 的 IP 地址,请在命令行输入ifconfig 。在我的例子中,它是192.168.0.100。

默认情况下,Apache 会在 web 文件夹中放置一个测试 HTML 文件。当您在 Pi 本身或网络上的另一台计算机上浏览到http://192.168.0.100(使用您自己的树莓派地址)时,将提供此默认网页。

如果您在 Pi 或网络上的另一台计算机上浏览到默认网页,您应该会看到:

poYBAGOXz3aAJZPZAAFfN6MhshM858.png
 

这意味着您的 Apache 服务器正在工作。

更改默认网页

这个默认网页只是文件系统上的一个 HTML 文件。它位于 var/www/html/index.html。

在终端窗口中导航到此目录并查看里面的内容:

cd /var/www/html
ls -al

此命令将显示以下结果:

total 12
drwxr-xr-x  2 root root 4096 Apr  24 16:15 .
drwxr-xr-x 12 root root 4096 Apr  24 16:15 ..
-rw-r--r--  1 root root  177 Apr  24 16:15 index.html

这表明默认情况下/var/www/html/中有一个名为 index.html的文件,它归 root 用户所有。要编辑该文件,您需要将其所有权更改为您的用户名。使用以下命令更改文件的所有者:(pi是默认值,使用您的用户名):

Sudo chown pi: index.html

您现在可以尝试编辑此文件,然后刷新浏览器以查看网页更改。

在树莓派中安装 PHP

现在要使用 PHP 代码和 HTML,我们必须在 Raspberry Pi 中安装PHP 扩展。使用 PHP 代码,我们可以创建 shell 命令来从 PHP 脚本控制 LED。

为了允许 Apache 服务器编辑 PHP 文件,我们将安装最新版本的 PHP 和 Apache 的 PHP 模块。在终端中使用以下命令安装这些:

sudo apt-get install php libapache2-mod-php -y

现在您可以删除默认的 index.html 文件

sudo rm index.html

并创建您自己的index.php文件:

sudo nano index.php

现在看看它是否有效,您可以放置​​一些内容,例如:

 phpinfo(); ?>

如果您在浏览器中刷新页面,您将看到一个包含大量 PHP 信息的长页面。这意味着PHP扩展已经安装成功。如果它不起作用,您可以尝试重新安装Apache服务器及其PHP扩展。

第 5 步:使用此 Raspberry Pi Web 服务器开始编码以控制 GPIO 引脚

现在删除index.php文件中的先前代码,并在 HTML 代码主体中插入 PHP 代码来控制 GPIO 引脚。

首先我们创建一个

元素。

 

method="get" action="index.php">

然后创建按钮来打开和关闭 LED

classhljs-symbol">red" type="submit"  value="Turn Red LED On" name="ron"> 
<input class=" red" type="submit"  value="Turn Red LED Off" name="roff">

因此,当您单击提交按钮时,会将表单数据发送到 PHP 代码进行处理。

我们将为要控制的每个 LED 创建其他按钮。

在 PHP 代码中,首先我们使用shell_exec()命令。该命令用于从 PHP 脚本运行 shell 命令。

对于每个 LED,我们将通过此命令设置正确的输出。红色的连接到 GPIO 17,因此我们将编写:

shell_exec("gpio -g mode 17 out");

之后,使用用于收集表单数据的 PHP 超全局$_GET,我们检查所按下按钮的名称值是否显示在 URL 中。

poYBAGOXz3iATPquAAAOt37zqps359.png
 

如果是,我们将 GPIO 引脚设置为 0 用于关闭 LED 或 1 用于打开它。

if(isset($_GET['roff']))
{
	shell_exec("gpio -g write 17 0");
}
else if(isset($_GET['ron']))
{
        shell_exec("gpio -g write 17 1");
}

实际上,整个 PHP 代码由几个 if 语句组成,对应于每个 LED。

您还可以在页面中添加一些 CSS 代码以使其看起来不错!

 

 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'在Raspberry Pi上通过网络控制LED',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);