冠状病毒在全球范围内增长了很多,并且出现了许多公共数据集以提供有关病毒传播的实时和历史信息,但是您如何在自己的嵌入式设备中将所有这些信息绘制在图表上呢?
在本文中,我们展示了如何从头开始构建图表的图形用户界面 (GUI),连接到冠状病毒信息的 REST 数据库,以及如何在嵌入式设备上运行它。收集的数据将绘制在代表全球病毒演变的折线图上,我们将使用Toradex Colibri 模块和NXP iMX6ULL 执行所有测试,无需 GPU。
此图表上显示的数据可从Rapid API网站的冠状病毒地图部分免费获得。可以使用 Rest WebService 进行连接,也可以在设备内下载 JSON 数据和包。此代码是使用TotalCross SDK编写的,用于开发、构建应用程序并将其打包到嵌入式设备,如下图所示。
Colibri iMX6ULL 是一款具有 Wi-Fi 和蓝牙功能的 Toradex 计算机模块,基于 NXP i.MX 6ULL 应用处理器,具有适用于各种物联网和嵌入式设备的 Arm Cortex-A7 内核。这个强大的工具与 Totalcross SDK 一起使用,可以开发广泛的应用程序。所有这些示例代码都可以在GitHub 上免费获得,您只需将开发环境配置为 TotalCross。在这里,我们有一个简单的教程,它还提供了有关部署和运行项目的信息。
要访问冠状病毒数据,请访问 Rapid API 网站。在冠状病毒地图上,获取URL请求数据;最新的报告菜单有代码片段。该项目基本上有两个主要类,CoronaChart和CoronaChartApp;它还有运行类 RunCoronaChartApplication。数据离线时使用JSON文件,设备可以直接读取信息;此文件已保存在资源文件夹中。
CoronaChart 类负责在图表上构建数据。CoronaChartApp 类是加载主 UI 的主窗口。它连接到 Web 服务并在图表中运行确认、恢复和死亡的动画。
private void fillData() {
[...]
if (offlineCheck.isChecked())
response =
getCoronavirusData("https://coronavirus-map.p.rapidapi.com/v1/summary/latest", HttpStream.GET);
else
response = new JSONObject(new String(Vm.getFile("request.json")));
JSONObject data = response.getJSONObject("data");
dates = data.names();
array = data.toJSONArray(dates);
for (int i = 0; i < array.length(); i++) {
date = dates.getString(i);
item = array.getJSONObject(i);
MyDate myDate = new MyDate(Integer.parseInt(Convert.remove(date, "-")));
confirmedList.add(new Data(myDate, item.getInt("total_cases")));,>
recoveredList.add(new Data(myDate, item.getInt("recovered")));,>
deathsList.add(new Data(myDate, item.getInt("deaths")));,>
}
[...]
}
最重要的方法是 fillData(),它用于从 Rapid API 以 JSON 格式加载信息。getCoronavirusData() 使用 Http Stream 连接到 API 并从站点获取信息。它返回将在 fillData 上处理的 JSON 对象。必须使用 Rapid API 密钥更改 secretKey 字符串才能使连接正常工作。
每次点击开始按钮时,它都会连接到 Web 服务,下载所有信息并将其绘制在图表上。也可以在资源文件夹中加载文件request.json 。Vm TotalCross 类具有操作文件的方法,因此我们可以打开带有电晕信息的 JSON 文件。该文件将被加载到应用程序上,将这些数据解析为字符串并解析为 JSONObject。
JSONObject getCoronavirusData(final String url, String httpType) {
[...]
HttpStream.Options o = new HttpStream.Options();
o.readTimeOut = 5000;
o.socketFactory = new SSLSocketFactory();
o.requestHeaders.put("x-rapidapi-host", "coronavirus-map.p.rapidapi.com");
o.requestHeaders.put("x-rapidapi-key", secretKey);
HttpStream hs = new HttpStream(new
URI("https://coronavirus-map.p.rapidapi.com/v1/spots/summary"), o);
ByteArrayStream bas = new ByteArrayStream(4096);
bas.readFully(hs, 10, 4096);
hs.close();
String string = new String(bas.getBuffer(), 0, bas.available());
request = string;
[…]
}
此 JSONObject 将被读取并分离为确认列表、恢复列表和死亡列表。加载构建包时,文件 request.json 在设备上自动可用。除了我们图表上的信息外,还有其他信息可能对未来的工作有用,例如活跃病例、危急、测试、死亡率和康复率。
项目中存在的大多数其他方法都涉及图表中数据的组装和动画;可以在可供使用的代码中研究它们。其余的代码片段是关于屏幕的组装,主类从 MainWindow 类扩展,其覆盖方法如 InitUI,它将构造屏幕上的所有元素,如背景颜色、按钮、复选框及其监听器方法。
该项目中使用的TotalCross 技术提供了一个占用空间小的应用程序(甚至使用 Java),非常适合这种设备。TotalCross 不使用 JVM(Java 虚拟机),但由其自己的开源虚拟机 TCVM 支持。这使其能够保证使用此框架开发的应用程序的几乎本机性能。此外,它使我们能够用很少的命令创建出色的 UI,即使对于低端 MPU 也是如此。
按照这些步骤,您可以快速构建您的冠状病毒图表并在嵌入式设备上运行它。您可以根据需要将相同的知识应用于不同的数据库并创建自己的图表。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !