电路显示互联网数据

22,086

1

0.

简介:电路显示Internet数据

关于:制作和分享是我两个最大的激情!总的来说,我从微控制器到针织的一切都发表了数百家教程。我是纽约市摩托车手和不悔改的狗妈妈。我的禾......

祝贺这是对此!您通过所有工具乘坐最艰难的部分,现在是时候有更多有趣的数据显示时间。在本课程中,我们将为实时LED天气显示构建原型。您将学会通过Adafruit IO从IFTTT更新的情况下,将Neopixels编码以点亮不同的颜色。

第1步:简单的LED电路

这个电路看起来很熟悉吗?它应该到现在!这是我们在上一课开头使用的同一个简单的按钮和LED,连接到羽毛HuzzhESP8266。根据图表重建电路并通过导航到载入按钮到adafruit io测试代码文件 - > SketchBook - > Button_Input_led_output。如果你找不到它,就不担心,只是下载它从这个步骤(并更好地照顾这份副本,ya?)。

在将代码上传到您的董事会之前,请填写您的adaio用户名和密钥以及您的无线网络名称和密码(如果您还没有)。上传代码并测试按钮是否工作以点亮LED。使用串行监视器检查是否有任何问题(不正确的wifi详细信息会阻止连接等)。

int命令= data-> toint();if(command == 1){//点亮LED Serial.print(“收到< - ”);serial.println(命令);DigitalWrite(LED_PIN,高);延迟(500);DigitalWrite(LED_PIN,低);} else {serial.print(“收到< - ”);serial.println(命令);}

在此代码中,LED不会以直接响应按钮按下按钮,而是响应ADAFRUIT IO Feed“命令”的消息。按下按钮只是将数据放入馈送中的一种方法 - 让我们使用IFTTT移动应用来点亮LED。如果您还没有,您可能希望在IFTTT设置中切换上一个小程序关闭(将您发送电子邮件的那个)。

安装用于Android或iOS的IFTTT应用程序后,您可以在计算机的web浏览器或移动设备上完成小程序创建过程(该过程在不同平台之间的外观可能有一些差异,但基本相同)。

单击以创建一个新的applet,然后选择“按钮小部件”然后“按钮按”作为触发器(“+此”)和“adafruit” - >“将数据发送到adafruit io”作为输出(“+ ther”)。

从下拉菜单中选择您的Feed“命令”,然后在数据字段中输入数字1。单击以完成创建操作。

使用按钮窗口小部件创建的applet是特殊的 - 它们在移动设备上放置一个小部件,将触发主屏幕上的一个单击图标的操作。使用您的新小部件添加到您的主屏幕中IFTTT优秀的多平台指南然后点击吧!

你有什么注意到电路的行为?激活小部件后,LED在亮起后需要多长时间?当我原型的IOT设备时,我会经常创建一个按钮小部件,以便在仅在一个复杂的特定条件下触发时手动触发我的电路(仅在每天只发生一次的活动,只有天气变化等。)。它也可以是在展示所提出的数据源难以模拟现场的概念原型的证据中的一个有用的工具(在使用WiFi的演示室内模拟到达GPS位置,但例如,没有GPS信号)。它也是一个很好的故障排除工具。

第2步:添加neopixels

让我们用一些颜色变化的可寻址LED(又名Neopix)来升级这个电路的输出。您至少需要一个,本课程后面的示例代码使用六个。我不建议在这个练习中使用超过10个像素。如果您还没有,您可以通过阅读我的免费Arduino课程中的技能输液课。您可能会发现调整浏览器窗口大小,以便沿着Arduino软件窗口的侧面可见。

根据以下图表将您的Neopixel(s)绑定到现有电路:

我们将从最后一步中添加到按钮草图,以使Neopixel在LED时亮起。虽然你可以下载示例草图对于此步骤并使用您的Arduino软件打开它,我鼓励您尝试用手进行三个小型代码,并使用样本文件作为倒退和故障排除比较工具。这将为您的编码肌肉弯曲并磨练您的眼睛,这两种情况都是开发自己的突出项目的重要技能。我会一次走过你的代码一个,让我们走吧!

文件 - >另存为...并为此文件的修改版本选择一个新名称。在草图顶部附近,在wifi配置之后,添加以下NeoPixel设置代码,更改NUMèled变量以匹配已连接的像素数。

#include  #define pixels_pin 15 #define num_leds 6 #define亮度50 adafruit_neopixel条= adafruit_neopixel(num_leds,pixels_pin,neo_grbw + neo_khz800);

第一行包括Neopixel库,因此您的程序可以访问其功能,三个变量声明持有您的像素已插入的信息,有多少,以及它们应该是多么亮起,并且最后一个光线设置了新的Neopixel对象称为条带,其中包含您刚才描述的功能。

接下来,在草图的设置功能内,添加一些行以激活neopixels:

strip.setBrightness(亮度);strib.begin();strip.show();//将所有像素初始化为“关闭”

在设置Neopixels的全球亮度的同时不是强制性的,因此它可能有助于原型设计,因为它会节省大量的力量。计算机的USB端口只能提供大约500mA,因此如果我尝试不同的代码并且我已经连接了Neopixels,则拨打亮度使电路经常更换代码时更容易电动。哦,它也让你的项目在你努力时蒙蔽你!strib.begin();strip.show();需要激活像素对象。

就在亮起LED的代码线以下,添加两个设置并显示像素颜色更改的行。通过交换R,G,B和W值来自定义颜色以适应您的口味strip.color();

//使用格式rible.color(r,g,b,w)stribe.setpixelcolor(0,strip.color(0,0,0,100))更改Neopixel颜色;strip.show();//始终记住调用strib.show()来显示更改

别忘了添加另一个stribe.setpixelcolor();strip.show();当LED在低温(上面的屏幕截图中的线路144和145)时转动像素。

strip.setPixelColor(0,strip.Color(0,0,0,0))//关闭NeoPixel strip.show()//始终记住调用strip.show()来显示更改

上传更新的代码后,您的第一个像素应与您之前连接的LED一起闪烁。此时,您可以决定完全从您的面包板和代码中删除LED,尽管我喜欢在原型设计/故障排除时将其留到位。如果您尝试编译代码但获取错误,请梳理您的代码,查找拼写错误(额外的逗号,缺少分号等),并与可下载的示例进行比较。如果您的代码上传,但没有亮起,请检查您的WiFi和AIO详细信息是否有错误,并使用串行监视器检查电路是否正在连接和接收数据。

要控制更多像素,只需将其颜色设置为stribe.setpixelcor(),每个都在其自己的行上(忘记仔细检查草图顶部的Num_leds变量与您的像素计数匹配)。记得打电话给strib.show();要显示更改,并将其全部关闭。

strib.setpixelcolor(0,strib.color(0,0,0,0));//关闭neopixel stribe.setpixelcolor(1,strib.color(0,0,0,0));//关闭neopixel stribe.setpixelcolor(2,Strip.Color(0,0,0,0));//关闭neopixel stribe.setpixelcolor(3,strib.color(0,0,0,0));//关闭neopixel stribe.setpixelcolor(4,strib.color(0,0,0,0));//关闭neopixel stribe.setpixelcolor(5,Strip.Color(0,0,0,0));//关闭neopixel strib.show();//始终记住调用strib.show()来显示更改

任何时候你的代码都有类似的重复元素,这表明你可以使代码更简洁。例如,要关闭所有像素,可以在每个像素的代码行(上面显示的六个像素)上“归零”每个像素的颜色,或者用一个小For循环替换该列表:

for(int i = 0; i 
        

这种小的代码改进,或者优化,可以使您的代码更灵活且易于阅读,甚至会使生成的文件大小更小。虽然您可能在您的编码技能中感到充满信心尚未知道何时进行这些更改,但重要的是要意识到有很多方法来编写执行相同操作的代码。在这种情况下,无论哪种方式都很好,但有一个关键差异/权衡要注意:for循环迭代到strib.numpixels();,这是一个内置函数,它将返回在开始时建立的像素数。因此,如果您稍后更改像素数,则您可以更少的工作来更新以适应整个草图。

接下来,让我们探索另一种类型的数据来用我们的像素表示。

第3步:收集饲料中的天气条件

到目前为止,我们的feed数据只有0和1。让我们看看当我们收集一些天气数据到一个叫做“降水”的新feed时会发生什么。要在当前天气条件每次发生变化时获取更新,请创建四个IFTTT小程序,使用weather Underground触发器将数据发送到相同的降水源,每个小程序具有四个条件选项中不同的一个。由于此提要仅在天气变化时更新,因此可能需要几天时间才能看到数据的变化。

饲料而不是数字,填充了代表各种天气条件的单词。在Arduino中,此馈送数据类型称为a细绳,这是一个可以存储多字符文本的对象。您可以了解有关此变量类型的更多信息官方Arduino网站,并在Arduino软件中探索多个字符串示例。由于我们正在寻求评估饲料中的字符串,因此stringComparisonoperators示例特别相关。在示例草图中(通过导航到您的Arduino软件也可以访问文件 - >示例 - > 08.Strings-> StringComparIsenPoperators),您可以找到几个带有描述性注释的if语句,这些语句解释并显示了如何以几种不同的方式比较两个字符串。

//两个字符串不平等(病例敏感性问题):stringone =“this”;stringtwo =“this”;if(stringone!= stringtwo){serial.println(stringone +“=!”+ stringtwo);} //您也可以使用Equals()来查看两个字符串是否相同:if(stringone.equals(stringtwo)){serial.println(stringone +“等于”+ stringtwo);} else {serial.println(stringone +“不等于”+ stringtwo);} //或许要忽略案例:if(stringone.equalsignoreCase(stringtwo)){serial.println(stringone +“等于(忽略案例)”+ stringtwo);} else {serial.println(stringone +'不等于(忽略案例)“+ stringtwo);}

根据该示例的这一部分,您可以看到比较字符串可以像使用IF语句和比较运算符==(等于)和!=(不等于),以及两个内置 -在职能。等于.等信号情况. 这三个函数非常相似,但我们将使用.等信号情况提供最大的输入灵活性。

第4步:用Neopixels显示天气数据

让我们从一个开始新的可下载示例草图,它不包含按钮输入,并已加载有必要的天气处理位。在Arduino打开它,个性化它以反映您的WiFi和Aio信息,并将代码上传到羽毛Huzzah Neopixel电路。您可以留下按钮和LED连接,虽然它们不会再次使用,直到下一课。

为了模拟天气显示,让像素照亮一些符号。漫反射LED的一个最简单也是最好的方法就是给它们空间,所以建造一个有一定深度的小纸板外壳。添加更多的纸板墙,将像素分为几个小室(我使用三个小室,每个小室有两个像素)。一张普通的白色打印纸贴在腔室的开口处,形成了“屏幕”,而粘在另一层切纸上,你可以选择任何形状的阴影轮廓。

要测试此代码,可以通过单击操作 - >添加数据来手动将数据添加到Feed中。键入天气状况(粘贴到Arduino草图中描述的内容),然后单击“创建”以将其添加到馈送中。如果一切顺利,只要饲料更新,您的像素应该会更改。

让我们看看代码是如何工作的,这样您就可以为自己的项目定制它。

ADAFOUTIO_Feed*降水量=io.Feed(“降水量”);//设置“沉淀”源

在启动函数之前,需要为要使用的提要预留一些内存。虽然它不一定要有相同的本地名称,因为你称之为Adafruit IO,它肯定是有助于保持跟踪一切!

在设置内:

//为“降水”送入设置消息处理程序。//每当从AdaFruit IO收到的消息时,将调用Wandlemessage函数(下面定义)//。降水 - > onmessage(手续);

与注释所说的差不多-每当更新沉淀提要时,这一行调用函数handleMessage。向下滚动到主循环下方的handleMessage函数,第101行:

字符串预测= data-> toString();//将传入的天气数据存储在字符串中

此行将feed数据放入一个名为“forecast”的字符串中。

//以下字符串存储了我发现到目前为止弦雨=字符串(“雨”)的变量ifttt天气报告单词;弦Lightrain = String(“淡雨”);字符串RainShower = String(“雨水淋浴”);字符串amshowers = string(“夏天阵列”);弦rainandsnow =字符串(“雨雪”);string snow = string(“雪”);字符串雪花=字符串(“雪地淋浴”);string cloudy = string(“cloudy”);String mostlycloudy = string(“大多数是多云的”);字符串partlycloudy = string(“部分阴天”); String clearsky = String("Clear"); String fair = String("Fair"); String sunny = String("Sunny");

这些变量声明描述了我在饲料中观察到的所有天气状况,通过条件松散地分组。这些声明可以移动到程序的开始,但在这里保持它们使得更容易了解所有IF语句的下一部分:

//如果预测(预测.Equalsignorecase(rain)(rain)||预测)预测有雨今天预测“);stribe.setpixelcolor(0,strib.color(0,0,0,255)));stribe.setpixelcolor(1,strip.color(0,0,0,255));strib.setpixelcolor(2,stribt.color(0,30,150,150));strib.setpixelcolor(3,strib.color(0,30,150,150));}

该语句将存储在预测字符串中的馈送数据与我们定义的时刻前的雨季术语进行比较。使用或者||比较运算符让我们在同一IF语句中添加多个条件,将几个多雨条件分组成相同的蓝色和白色Neopixel输出。

如果陈述为三个其他群体评估:雪,多云和清澈的天空,还有三种相似。别忘了打电话strip.show();显示颜色变化!

第5步:进一步拍摄

如果你觉得天气显示的想法有趣和/或有用,你可能希望建立一个更最终的版本与焊接电路内的外壳的某种类型。

您可能希望添加一个数字LED显示屏以显示温度太高 - 在我的中找到两个技术可指示WiFi天气显示!!

也许你有兴趣可视化某些数字数据,如YouTube订阅者的数量 - 我你也在那里. 这只是两个显示互联网数据的项目示例,请查看以下集合中的更多项目创意!要完成本课程,请张贴本课程中电路的图片,或使用在此学习的技能构建项目的草图和描述。下一步,我们将结合输入和输出,创建两个设备,可以从任何有wifi连接的地方相互通话。

20人制作了这个项目!

建议书

  • 让它发光比赛

    让它发光比赛
  • 第一次作家大赛

    第一次作家大赛
  • PCB挑战

    PCB挑战

讨论