本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于ESP32的疫苗接种槽通知器

发布时间:2021-07-31
分享到:

基于ESP32的疫苗接种槽通知器

发布时间:2021-07-31
分享到:

如今,在印度获得疫苗接种位是一项艰巨的任务,尤其是对于 18 至 44 岁年龄段的人群。但我观察到,总有一些中心时不时会弹出 1 或 2 个空插槽,这可能是由于插槽的重新安排或取消。我决定制作一个装置可以提醒我。因此,我将向您展示我如何使用CoWIN网站上的开放 API并制作通知程序以在疫苗接种槽,有空位时提醒。

第 1 步:计划

得益于 CoWIN 网站提供的开放 API,您可以访问有关每个疫苗接种中心和每日预约可用性的数据。您所要做的就是输入请求 URL。然后,您将收到 JSON 格式的数据,需要对其进行反序列化以获得所需的数据。您可以在以下 6 个 API 之间进行选择,这完全取决于您要搜索的方式,按密码或按地区或按中心。这6个可以分为两类。首先是“findby”,它仅提供您输入的日期的可用性。另一个是“calenderBy”,显示接下来 7 天的可用性。我更喜欢“calenderByCenter”,它会在接下来的 7 天内提供特定中心的预约可用性。

然后我将编写一个代码,只从原始 JSON 数据中提取有用的位,在 OLED 显示器上显示信息,并在有空插槽时使用蜂鸣器发出声音警报。

在我测试代码时,它实际上给了我一个突然出现的空位警报,试验成功。

 

第 2 步:您需要的东西

  1. 1x ESP32-WROOM-32
  2. 1x 分线板
  3. 1x 128x64 IIC OLED 显示屏
  4. 1 个 AMS1117 3.3V 稳压器
  5. 1x 蜂鸣器
  6. 1x USB 数据线
  7. 1x 10k 电阻

 

第 3 步:获取中心 ID

由于我们使用的是 calenderByCenter 方法,因此我们需要提供“中心 ID”作为 API 的输入。这就是您可以找到中心 ID 的方法。我在下面使用的所有 API 都可以在这里找到。

首先,您需要知道状态 ID。转到下面提到的链接并记下您所在州的“state_id”。

https://cdn-api.co-vin.in/api/v2/admin/location/st...

获得州 ID 后,您将需要一个地区 ID。复制下面提到的链接并将“state_id”替换为您所在州的州 ID。您需要记下要关注的中心的 ID 区。

“https://cdn-api.co-vin.in/api/v2/admin/location/districts/state_id”
复制下面提到的链接并用您的地区替换该地区并添加今天的日期。接下来,搜索您所在地区的疫苗接种中心并复制其名称。

“https://cdn-api.co-vin.in/api/v2/appointment/sessions/public/findByDistrict?district_id=395&date=16-06-2021”
使用 Ctrl + F 搜索中心名称。还有中心 ID!

 

第 4 步:代码

在上传代码之前,您需要进行以下更改,如图所示。确保为lberstone的蜂鸣器下载并安装Tone32库

输入您的 WiFi SSID 和密码。在 centerID[] 数组中输入中心 ID(在上一步中收集),以逗号分隔。

输入在上述数组中输入的中心总数。(注意:这需要修复。我无法直接使用该函数获取数组的“大小”)

如果您想根据需要修改代码,您可以按照下一步学习如何反序列化 JSON 数据。

 

第 5 步:反序列化 JSON

发送请求 URL 后,您将获得原始 JSON 数据,需要对其进行反序列化以获取所需数据。什么是 JSON?

JSON代表Ĵ AVA小号CRIPT ö bject Ñ浮选。JSON 是一种用于存储和传输数据的轻量级格式。它通常用于从 Web 服务器读取数据。这也正是这里所做的。JSON 数据以名称/值对的形式写入。它们都用冒号 (:) 分隔。

“center_id”:“711435”
JSON 对象写在大括号 { }

{"center_id": "711435", "name": "Fortis Hospital Kalyan W"}
JSON 数组写在方括号 [ ] 中

“中心”:[
{"center_id": 711435, "name": "Fortis Hospital Kalyan W"}, 
{"center_id" : "718791" , "name" : "SRI VANI VIDYASHALA SCHOOL"}<br>]
上面的数组有两个元素。简单来说,

中心[0] = {"center_id": "711435", "name": "Fortis Hospital Kalyan W"}<br>centers[1] = {"center_id": "718791", "name": "SRI VANI VIDYASHALA学校”}
我将使用相同的逻辑从 CoWIN 网站提供的整个原始数据中获取所需的点点滴滴。另外,我正在使用bblanchon 的 ArduinoJson库。这让事情变得容易多了。您可以像这样使用 JSON 查看器来了解原始数据。

在第一张图中,我们可以看到数组“sessions”包含 5 个元素。在每个元素中,有许多名称/值对。例如,我想获取名称“name”的值。

"name" : "SRIVANI VIDYASHALA 学校"

它可以通过以下方式传递给字符串。

String center_name = obj["sessions"][0]["name"]; //center_name = "SRI VANI VIDYASHALA 学校"
同样对于元素 1,

String center_name = obj["sessions"][1]["name"]; //center_name = "KDMC 艺术画廊 KALYAN W"
您还可以找到“嵌套”数组,如第二张图片所示。换句话说,嵌套数组是数组内的数组。但逻辑保持不变。例如,我想获取疫苗的名称。该名称/值对存在于数组“sessions”的元素“0”中,该数组进一步存在于另一个数组“centers”的元素“0”中

Stringvaccine_name = obj["centers"][0]["sessions"][0]["name"]; //vaccine_name = "COVISHIELD"

 

第 6 步:3D 打印

没有必要 3D 打印,您可以使用其他方法轻松制作盒子。

总之,这里没什么好看的。我在 Fusion 360 中做了一个小盒子,上面有一个盖子和一个用于 OLED 的开口。它应该是摩擦配合,不需要螺丝。我用黑色 PLA 打印了它。

 

第 7 步:电子产品

按照原理图进行连接。我不会得到定制的 PCB,因为要进行的连接很少。相反,我使用了 ESP32 分线板来使设备尽可能小。我“自由形式”焊接了所有组件。由于我将使用 5V USB 电源为其供电,而 ESP32 需要 3.3V,因此需要一个 3.3V 稳压器来降低电压。为了对 ESP32 进行编程,我使用了 FT232RL USB 到 UART TTL 转换器。您可以添加一个母头对 ESP32 进行编程,以便将来随时轻松编程。

获取任何未使用的 USB 电缆,剪掉末端并用它为设备供电。如果ESP32在连接WiFi时不断重启,请在3.3V稳压器的输出端增加一个10uF的陶瓷电容。

如果您不喜欢焊接,您也可以使用任何 ESP32 开发板(如 NodeMCU-32S)并制作面包板版本。此外,您不必担心其他问题,例如正确的电源和编程也很容易。

 

第8步:试验结果

最后,上传代码并使用 USB 为其供电。任何可以提供至少 1A 电流的 USB 电源都可以工作。坐下来,等待,你就会获得一个空位。

谢谢你坚持到最后。我希望你喜欢这个项目。

接种疫苗,注意安全,我们下期再见!

(以上内容转载自外文网站)

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论