25

单片机点灯小能手 · 2021年05月27日

我们一起苗苗苗!教你用STM32获取疫苗接种数据

作者: wcc149
首发:电子电路开发学习
中国疾控中心免疫规划首席专家王华庆说,我国要建立免疫屏障,可能需要10亿以上的人接种新冠疫苗,接种率越高,免疫屏障就越牢固。

张文宏医生说,年轻人打疫苗是为国家做贡献,最好在今年打、尽快打!。最近,你打疫苗了吗?

image.png

一起苗苗苗

上周三,我去打疫苗了,第一针预约,健康状况询问,打针,观察,人不算太多,整个流程下来很顺利,目前没有任何的不良反应。
image.png

接种界面

去年春节期间,宅在家为国家做贡献的期间,我做了一系列的疫情数据监控练手小项目,比如基于桌面Qt的基于STM32MP157的,基于STM32F103裸机RT-Thread版本的,可能很多读者都是从那个时候开始关注我的。

其中PC桌面和ARM Linux版本的程序代码,由于国内疫情的好转,使用到的API接口可能已经关闭,或者JSON数据格式有很大的改动,所以在运行时,会出现程序异常停止,或者无数据显示的情况,这是正常的。

而STM32F103裸机和RTOS版本,前几天我试了一下,还是可以正常运行的。
image.png

疫情监控数据

从3月24日起,我国启动了新冠疫苗接种数据的日报制度,国家卫健委每日会在官网公布疫苗接种总数,这也是人类疫苗接种史上首次启动国家级最大规模的日报制度

能不能把之前做的疫情数据监控改为疫苗接种数据呢?放在桌面上,看着每天新增的接种数据,关注着我国逐步建立免疫屏障的进度!先上微信看看,有没有疫苗接种相关的数据,果然,有实时的全球疫苗接种数据。

image.png

疫苗数据

由于之前做过类似的项目,所以做起来还是比较简单的。改一下API接口,JSON解析函数,调整一下显示界面就可以了。于是之前的项目就变成了全球新冠疫苗接种数据实时监控平台。名字很唬人,其实很简单。效果展示:

image.png

疫苗接种数据

这个小项目的代码是完全开源的,你可以在文末获取项目的Gitee仓库地址,或者关注公众号【电子电路开发学习】,在后台回复【STM32疫苗】关键词,来直接获取代码压缩包的下载链接。

下面介绍如何来制作这样一个全球新冠疫苗接种数据实时监控平台,并不需要和我一样的硬件,只需要了解整个项目的实现过程,在任何平台上实现都是一样的。

主要包括以下内容:

  • 1.硬件平台准备
  • 2.API接口获取
  • *3.ESP8266配置*
  • *4.JSON数据解析*
  • *5.LCD数据显示*
  • *6.开源地址*

1.硬件平台准备

基本硬件主要有以下:

  • 一款主控芯片。比如ARM、51、AVR等平台,最好是片上外设多一点的,GPIO,串口,定时器这些,如果带有WiFi功能就更好了,这意味着可以省掉一个WiFi模块。如ESP8266就是一款具有WiFi功能的MCU,可以进行SDK开发。
  • 一个联网模块。比如WiFi,2G/4G,有线以太网等,如果主控芯片带有WiFi功能,可以省略!
  • 一个显示设备。比如LCD,OLED,墨水屏,点阵屏等,用于数据的显示。
  • 一些必要的调试工具。如下载器,USB-TTL模块等,最重要的是要有一颗不怕困难的心

这里我使用的是STM32+ESP8266的方案,通过AT指令的方式和WiFi模块进行交互。

主要包括以下硬件模块:

  • STM32F103RET6,主控芯片,完成串口交互,LCD控制等
  • ESP8266-01,用于连接WiFi获取数据
  • 3.2' TFT LCD,用于显示数据
  • SPI Flash,用于存储字库
  • LED,用于指示状态
  • J-Link,USB-TTL,用于程序调试与下载。

实际开发板如下,这是一款我在大学期间自己画的小板子:

image.png

图片

2.API接口获取

API和之前一样是通过腾讯新闻获取,使用浏览器打开腾讯新闻-实时接种数据页面:

https://news.qq.com/ylh5/worldvaccine.htm#/

PC和手机端界面:

image.png

PC界面

F12打开开发者模式,切换到Network网络面板,刷新页面,找到请求的URL,可以看到是POST方式:

image.png
POST方式

并使用浏览器直接访问这个页面,

image.png

访问疫苗接种数据API

可以看到是GET方式:

image.png

GET方式

说明支持两种HTTP请求方式:

GET:

182.254.21.58:443https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=VaccineTopData

POST:

182.254.21.36:443https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=VaccineTopData

3.ESP8266配置

有了IP地址,端口号和API地址,下一步就是使用ESP8266来访问这个API接口,并得到返回的数据。为了和之前的程序兼容,这里我选择的是GET请求的方式。EPS8266使用AT指令的方式进行配置,由于之前的项目已经完成了ESP8266配置的部分,只需要修改一下IP地址,端口号和API地址即可,配置流程使用串口打印出来,如下:
image.png
JSON解析

可以看到返回的数据是常用的JSON格式字符串,长度为265字节。有了JSON数据,下一步就是对数据进行解析,使用的是cJSON解析库,由于数据格式比较简单,解析函数也不多。

格式化之后的数据:
image.png

json原始数据

4.JSON数据解析

由于数据比较简单,解析函数就不贴出来了。可以点击:了解JSON格式使用cJSON解析使用cJSON构建,获取以往的文章介绍。

在解析数据时,要注意,其中"中国","全球"汉字为UTF-8编码,在Keil中进行键值解析时,需要修改字符编码为UTF-8:

image.png

UTF-8

或者在GBK2312编码状态下,键值对字符串"中国"="涓浗",这一点要特别注意:

image.png
GBK2312

5.LCD数据显示

LCD显示部分,和上一个项目有所不同,之前是把使用到的部分字体进行取模,获取点阵数据,然后再显示出来。这次我是读取板子上的SPI Flash字库文件,然后进行显示的,这样可以显示所有的文字,比较方便。UI界面比较简单,没有采用GUI库。
image.png

疫苗接种数据

6.开源地址

这个项目的代码工程已经开源在国内的Gitee平台:

  • STM32获取疫苗接种数据

    gitee.com/whik/stm32_ncov_vaccine

  • STM32获取肺炎疫情数据

    gitee.com/whik/stm32_2019_ncov

关注公众号【电子电路开发学习】,在后台回复【STM32疫苗】关键词,来直接获取代码压缩包的下载链接。

本来计划根据IP定位的地址,然后查询距离最近的接种点信息,但是没找到合适的API接口,如果腾讯开放这种类型的接口,我也会更新的,欢迎大家关注,Fork & Star!

WiFi和API接口配置信息在config.h文件里:
image.png

WiFi配置

这个项目,总体来说,没有太多的技术含量和实用价值,但是作为一个学习的小项目还是很不错的!如果修改一下接口,比如改为天气信息,空气质量,新闻动态,股票信息,尾号限行,油价信息等等,放在工作桌面上,也算是一个比较有科技感的摆件了!

一起苗苗苗

中国疾控中心免疫规划首席专家王华庆说,如果大家都把接种疫苗往后拖,那么免疫屏障就永远建立不起来,我们想摘掉口罩的愿望可能就不会实现。如果大家接种得快,这个屏障可能就会早一天到来。要尽早恢复到正常的生活,疫苗是目前的最佳选择。

新冠肺炎是百年难遇的灾难,要全面控制病毒的传播,使人类社会恢复正常的生活,办法只有一个:实现群体免疫!而实现群体免疫最快最好的方法就是:打疫苗!为了自己的安全,也为了尽快建立免疫屏障,在这里倡议大家尽快去接种,建立全民免疫,需要你的一“臂”之力!

image.png

一臂之力


推荐阅读

推荐阅读
关注数
3068
内容数
83
电子电路、单片机、嵌入式、物联网等技术文章分享。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息