使用RIOT(实时物联网)框架创建一个简单的数据记录器
2017年3月8日通过罗宾·米切尔在这个项目中,我们将通过创建一个数据记录器来演示RIOT的简单性,该记录器将在PC服务器应用程序的图形上绘制光的级别。
实时物联网,是一个框架,设计使使用ESP8266与微控制器容易。在这个项目中,我们将通过创建一个数据记录器来演示RIOT的简单性,该记录器将在PC服务器应用程序的图形上绘制光的级别。
介绍
在里面最后一个防暴项目,我们学习了如何在Windows PC上创建一个简单的RIOT服务器和一个简单的RIOT客户端,它的LED可以由服务器打开和关闭。从这个项目中,我们可以看到RIOT可能允许任何带有UART端口的系统变成一个支持互联网的设备。
在这个项目中,我们将查看客户端 - 服务器通信,其中客户端将从LDR /电阻分频器拍摄电压读数,然后将此数据绘制到可以在服务器上找到的图形(在VB.NET中写入)。强烈建议您在尝试此项目之前通过上一个项目,因为代码和原理图设置的部分将被回收,但没有解释。
注意:骚乱现在被称为骚乱,可以在www.riotousframework.com上找到
用于编译的先决条件和软件
对于RIOT在客户端正确运行,必须使用特定的AT和SDK版本。AT版本必须是1.1.0.0,SDK版本必须为1.5.4。早期版本有错误时关闭连接和更高版本的缺少或错误代码。找出防暴客户端框架的要求,点击这里。
要编译项目,您将需要:
- 微芯片IDE 8.92
- 微芯片C18编译器
- Visual Studio Express 2012
另外,请务必通读本系列之前的项目,了解RIOT是什么。
的示意图
在这个项目中,我们需要利用ADC模块上找到的PIC18F25K20(PDF),3.3V微控制器。使用3.3V设备,因为ESP8266本身是一个3.3V设备,因此我们不需要包含逻辑级转换器。
一个额外的电容器已经包括在3.3V线(C5)附近的稳压器,以帮助消除高频噪声的电源线。
这个工程的示意图。点击放大
客户端代码
我们的客户端代码的第一个任务是正确设置板载ADC外设。我们的模拟读数是在RA0上找到的,所以我们使用以下代码获得该引脚作为模拟输入,打开ADC,并配置ADC。下面的设置代码也配置内部振荡器的最大速度(16MHz)和x4 PLL。这段代码可以在setup.h中找到。
我们的客户端控制器中所需的下一段代码是骚乱的配置,涉及创建ISR,配置UART模块,并告诉Riot如何通过UART发送数据。此代码(讲述Riot如何使用UART模块)由您编码,并将其插入IOT_ClientFrameWork.c。
这个ISR代码告诉RIOT已经收到了一个新字节,并且它还更新了RIOT框架中的状态机。
配置好客户端后,就可以设置设备输出、初始化RIOT、连接Wi-Fi网络,然后连接RIOT服务器。
现在是时候开始记录数据了!我们的客户端每隔一段时间就会从RA0读取数据(每秒几次读取,如果你想的话,你可以改变这个),然后将读取数据传输到RIOT服务器。使用一个定时器模块的外围设备来实现计时会更好,但是为了简单起见,本示例将使用一个简单的延迟循环。这里可以使用延迟循环,因为RIOT是使用UART接收中断更新的,该中断优先于主运行代码。
一旦延迟完成,通过在ADCON0寄存器中设置GO位来启动模数转换。一旦读取完成,ADC模块将清除GO位,因此while(ADCON0bits.GO)将无限期循环,直到ADC结果就绪。ADC结果就绪后,我们将结果的上8位转移到dataBuff数组(大小为1),然后将该单个字节发送到服务器。使用大小为1的数组是因为数据是通过指向数组的指针发送到RIOT框架的(这样数组中的字节流就可以发送了)。
以下是PIC18F25K20的配置值(硬件配置不当是微控制器项目中的一个常见问题源)。
服务器端代码
就像在客户端代码中一样,我们将从上一个项目中回收大多数代码(具体地,应用程序的布局,服务器配置以及用于检查客户端的新数据并确定哪些客户端的代码仍然连接)。此应用程序与上一个项目应用程序之间的差异是删除LED命令按钮和图表对象。
但首先,关于VB的快速注意:net(以及Visual Studio 2012 IDE)是我使用过的最实用的语言之一。在做这个项目之前,我并不是一个天生的程序员,我很关心如何创建一个具有图形化功能的GUI应用程序。结果证明,VB.net包含了一个图表对象,它绝对适合这项工作。简单的拖动/下降的主要形式有两或三行设置代码让你制图能力,将更具挑战性的语言如C或c++(不过,我相信这方便可能是。net框架本身而不是语言visual c#也是一个优秀的语言在visual Studio使用时)。
所以我们要做的第一件事是添加一个图表到我们的表单这是通过到工具箱> Data > chart来完成的。在那里,您可以调整图表区域的大小、更改颜色方案等等。
关于VB.net中的对象,一个很酷的事情是,它们会自动在配置文件中初始化和配置,而我们不需要费心去做。相反,我们只需要担心清理区域、创建新的数据系列,然后绘制传入的原始数据!在我们开始操作图表对象之前,我们需要配置RIOT服务器类。未来的RIOT版本将允许使用函数来完成RIOT的所有配置,但目前,配置是通过编辑VB文件完成的。vb中只需要编辑一行,也就是第114行,它要求用户输入机器的本地IP地址。由于某些原因,我不能通过使用本地主机来实现这一点。
回到图表对象,清除图形并创建一个新的数据系列非常简单。这将在我们按下服务器启动按钮时完成。
现在,图已经准备好绘制数据,服务器也已经初始化,现在应该从客户机获取传入数据,清除数据可用标志,并将数据绘制到图中。
快速的注意:下面的visual studio应用程序和视频显示了标记为“loggedLight”的图表,而实际上数据表示“loggeddarkness”。这是由于电位器配置,可以很容易地通过从256(最大值)减去记录的读数来固定。这将使记录下来的光亮而不是记录下来的黑暗。
BOM.
部分 |
参考示意图 |
数量 |
PIC18F25K20 |
IC1 |
1 |
AMS1117 3.3 v调节器 |
IC2 |
1 |
ESP8266 ESP-01 |
ESP8266 |
1 |
1 kΩ电阻器 |
R3、R4 |
2 |
5.6kΩ电阻 |
R2 |
1 |
10 kΩ电阻器 |
R5 |
1 |
LDR. |
R1 |
1 |
引领 |
D1, D2 |
2 |
100年nF电容器 |
C1 C2 C4 C5 |
4 |
22μF电容器 |
C3 |
1 |
获取项目运行
就像在以前的项目,我们将在面包板上构建电路。您可能会注意到AMS1117采用了一个IC封装,这对breadboard非常不友好。这个问题很容易解决,通过切断大标签,然后焊接设备到一块剥离板。从那里,一个3针直头可以连接到创建一个to -220类包。
将一个不友好的包转换为一个友好的面包板版本!
编译MPLAB项目,对PIC进行编程(最好是Release模式),运行VB.net程序。如果一切顺利,您的服务器应用程序不会在单击“启动服务器”时崩溃,客户端应该在电源应用后立即启动。最终,客户端应该能够打开指示灯led时,它首先连接到选择的Wi-Fi网络,然后到RIOT服务器。一旦客户端连接上,您应该看到服务器上的图表开始充满来自LDR的读数。
riot_part_2_project_files.zip.zip.
项目实施的视频
概括
这个项目演示了用几个简单的部件和一个免费的软件包来创建一个数据记录器所需的努力是多么的少。这个项目可以很容易地扩展使用不同类型的传感器(温度、湿度等)。此外,您并不局限于仅仅绘制数据;您还可以将其存储在一个文件中以供后续分析。
在下一个RIOT项目中,我们将查看设备间通信,其中一个客户端将通过RIOT服务器向另一个客户端发送消息。
为自己提供这个项目!BOM。
你知道“RIOT”是一个针对物联网应用的既定RTOS吗?
罗宾,
虽然我在某种程度上使用了框架来简化与ESP8266作为UART的接口,但框架的真正价值是将多个射频设备封装到一个统一的编程模块中。这是你的意图吗?
否则,为什么要打扰?如果我想IOT LDR,我只需使用esp8266(或其更大的兄弟,esp32)并直接使用Arduino IDE进行程序,并保存整个零件,代码和时间的整体流失。