0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于IoT和Arduino构建一个IPL记分板

科技观察员 来源:circuitdigest 作者:Debasis Parida 2022-08-02 17:29 次阅读

今天我们将使用 NodeMCU 和 P10 显示模块构建一个基于 IoTArduino 的 IPL 记分板,它足够大,可以显示实时比分,而且制作起来非常简单。

构建物联网计分板所需的组件

项目比较简单,需要的组件也不多。只需收集下面列出的物品。

Arduino纳米

ESP8266 NodeMCU

性能板

男性和女性标题

9V 直流,2 安培电源

5 安培、3 安培 SMPS

连接线

基于节点 MCU 和 Arduino 的物联网记分板工作

poYBAGLo7geAekDiAACat3XEeRo060.png

该项目的完整工作如上面的框图所示。在这里,“ CRICAPI ”API 服务用于获取实时 IPL 分数,然后由 ESP8266 nodeMCU 解码并再次发送到控制显示的Arduino Nano 。在这里,串行通信用于将信息从NodeMCU发送到 Arduino Uno。然后Arduino将需要显示的所需信息发送到p10显示器。

P10 LED矩阵模组基本工作原理

poYBAGLo7gGABeZzAAkj-923jXc222.png

P10 LED 显示模块是一种非常流行的矩阵显示器,用于宣传户外或室内条件。每个 p10 显示模块共有 512 个高亮度 LED,安装在塑料外壳上,旨在实现最佳显示效果。任何数量的此类面板可以组合成任何行和列结构,以设计 LED 通知/广告板。32*16 模块尺寸意味着每行有 32 个 LED,每列有 16 个 LED。因此,每个模块单元中有 512 个 LED。

这个模块有很多特点,比如它总共有512个LED,这使得制作广告牌非常酷,并且在我们需要展示的地方都需要它。它的总亮度为 3500-4500 尼特,因此您可以在光天化日之下非常清楚地看到它。它有一个最大值。功耗为 20W,因此可以由小型开关电源模块供电。它还需要一个单独的 5V 电源为逻辑部分供电。它具有 IP65 防水等级,因此可以在潮湿和雨天的户外轻松使用。

P10显示模块引脚说明:

pYYBAGLo7fyAbQbaAAfiatymTMU552.png

Enable:此引脚用于通过向 LED 面板提供 PWM 脉冲来控制 LED 面板的亮度。

A、B:这些称为多路复用选择引脚。它们采用数字输入来选择任何多路复用行。

移位时钟 (CLK)、存储时钟 (SCLK) 和数据:这些是正常的移位寄存器控制引脚。这里使用移位寄存器74HC595。

poYBAGLo7fiAPe1VAACGua4Mlrc918.png

P10显示模块接线图:

Arduino UNO 和 P10 显示模块按照如下所示的引脚映射互连:

poYBAGLo7fKAc-_iAAARSHufrIY314.png

重要的提示:

将 P10 模块的电源端子单独连接到 5V DC SMPS。建议将 5V、3 Amp 直流电源连接到单个 P10 LED 模块。如果您计划连接更多模块,请相应提高您的 SMPS 额定值。

基于 NodeMCU 和 IoT 的实时计分板 - 示意图

pYYBAGLo7e6AapOSAAGsHXVhxLw325.png

基于物联网的实时计分板的完整示意图如上所示。如电路图所示,首先将一个 9V 直流电源连接到 Arduino Nano,然后将来自 Arduino 的稳压 5V 直流电源提供给 NodeMCU。对于 Arduino 和 NodeMCU 之间的通信,使用 TX 和 RX 引脚,如图所示连接。最后,按照上图所示的电路图,将 P10 显示器连接到 Arduino。

在这个项目中,所有的连接都按照上图进行并焊接在穿孔板上。完成电路图后,电路板如下图所示:

pYYBAGLo7emAWDLEAASsYnk6_G0136.png

连接成功后,我已将板子连接到 p10 显示器并将电路封装在外壳中,如下图所示:

poYBAGLo7eWAeOeWAAY8Ox-ZKa4429.png

基于物联网的记分板的软件设置

在成功设置硬件之后,现在是时候在编写代码之前设置软件部分了。首先,需要完成 API 设置。为此,请访问 URL:https ://www.cricapi.com/并注册以创建一个新帐户。我们也可以使用我们的 Google 帐户登录。

登录您的 CricAPI 帐户,每天最多可免费获得 100 次点击。仪表板如下所示:

pYYBAGLo7eCAf6ChAAE-G-vtVO4300.png

单击“ Test CricAPI ”选项并转到“ Cricket score ”选项。将出现一个窗口,如下所示,其中包含 URL 和示例输出。复制 URL 以供我们将来参考。我在印度,我喜欢板球,所以我将其配置为显示板球得分。如果您希望它为任何其他目的配置它,您可以通过稍微更改代码来轻松完成。

poYBAGLo7dyAX_R5AAGe7A0g814090.png

基于 NodeMCU 和 IoT 的 Live Cricket Board 代码

在本节中,我们将讨论从 HTTP 网站获取数据并将其显示到 P10 显示器所需的代码,因为我们使用的是 NodeMCU 和 Arduino,因此这些将分为两个部分。第一个 Arduino 代码配置 NodeMCU,第二个配置 Arduino Nano。

设置 NodeMCU 以上传代码:

如果您是第一次将代码上传到 nodeMCU,那么您必须先包含板,使用以下步骤。

要将代码上传到 NodeMCU,请按照以下步骤操作:

1.打开 Arduino IDE,然后转到File–》Preferences–》Settings。

pYYBAGLo7daAEBXyAAAn54RZfaw114.png

2.在 “Additional Board Manager URL ”字段中输入https://arduino.esp8266.com/stable/package_esp8266com_index.json并单击“Ok”。

pYYBAGLo7dOAO2rKAADjLhJNu0g680.png

3.现在,转到工具 》 板 》 板管理器。在 Boards Manager 窗口中,在搜索框中键入ESP 8266,选择最新版本的开发板,然后单击安装。

poYBAGLo7c-AIo_HAAFvRy7DM14246.png

4.安装完成后,进入Tools -》 Board -》 选择NodeMCU 1.0(ESP-12E Module)。现在您可以使用 Arduino IDE 对 NodeMCU 进行编程

完成上述步骤后,现在可以将代码上传到 NodeMCU,完整的代码需要上传到 NodeMCU。首先,所有必需的库文件都将包含在代码中。这里,在这个项目中,ESP8266WiFi.h和ESP8266HTTPClient.h用于使用 ESP8266 NodeMCU Wi-Fi 模块,ArduinoJson.h用于使用 JSON 库,用于从 CricAPI 接收信息。

#include  
#include  
#include 

现在,定义了网络凭据,即 SSID 和密码。需要将 NodeMCU 连接到互联网。

const char* ssid = "管理员"; 
const char* 密码 = "123456789";

然后,为了将 nodeMCU 连接到互联网,调用 WiFi.begin并将 SSID 和密码作为其参数。此外,使用波特率 = 115200 初始化串行通信。

Serial.begin(115200); 
WiiFi.begin(ssid,密码);

在 loop() 内部,传递我们之前记下的 API URL,以获取实时板球比分。在http.begin() 函数中获取信息。

http.begin("http://cricapi.com/api/cricketScore?apikey=rd0uOcJvvxUCbNlzlsGWyJt3gP53&unique_id=1254075");

现在,通过读取并在串行监视器上打印 JSON 数据来验证接收到的 JSON 文件。然后如果接收到的数据是正确的,将其打印在 Serial 上以将其发送到 Arduino。

int httpCode = http.GET(); 
      if (httpCode > 0) 
      {
        字符串负载 = http.getString(); 
        const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(8) + 370;
        DynamicJsonBuffer jsonBuffer(bufferSize); 
        JsonObject& root = jsonBuffer.parseObject(http.getString()); 
        const char* name1 = root["description"]; 
        序列号.println(name1); 
        延迟(10000);
      }

代码完成后,编译代码并上传到NodeMCU。成功上传后,现在是时候为 Arduino 编写代码了。

对 Arduino Nano 进行编程:

与 NodeMCU 类似,我们需要先对 Arduino 进行编程,然后才能继续前进并完成代码。

对于 Arduino Nano,我们必须包含应用程序中使用的所有库。这里,代码中使用了“DMD.h”库和“TimerOne.h”,这两个库都可以通过下面给出的链接下载

从 GitHub 下载 DMD.h 库

从 GitHub 下载 TimerOne.h 库

下载并包含这两个库后,通过包含所有必需的库来启动代码。

#include  
#include  
#include  
#include "SystemFont5x7.h" 
#include "Arial_black_16.h"

在下一步中,为 LED 矩阵定义行数和列数。这里本项目只用到了一个模块,所以ROW值和COLUMN值都可以定义为1。

#define ROW 1 
#define COLUMN 1 
#define FONT Arial_Black_16 
DMD led_module(ROW, COLUMN);

定义了一个函数scan_module(),它通过 SPI 终端持续检查来自 Arduino Nano 的任何传入数据。如果是,那么它将触发中断以执行用户在程序中定义的某些事件。

无效 scan_module() 
{ 
  led_module.scanDisplayBySPI(); 
}

在setup()内部,定时器被初始化,中断被附加到函数scan_module,这在前面已经讨论过了。最初,使用函数clear screen(true) 清除屏幕,这意味着所有像素都定义为 OFF。

在这里,串行通信也启用了串行功能。begin(115200)其中 115200 是串行通信的波特率。

无效设置()
{ 
  Serial.begin(115200);
  Timer1.initialize(2000); 
  Timer1.attachInterrupt(scan_module); 
  led_module.clearScreen(真);
}

在这里,检查串行数据的可用性,是否有来自 nodeMCU 的有​​效数据。接收到的数据存储在一个变量中,然后打印在 p10 显示器上。

无效循环()
{
  如果(Serial.available())
{
数据=Serial.readString();
} 
Serial.println(数据); 
(String("Score:")+String(data)).toCharArray(cstr1, 100); 
    led_module.selectFont(字体);

然后,为了在模块中显示信息,使用selectFont()函数选择字体。然后drawMarquee()函数用于在 p10 板上显示所需的信息。

led_module.drawMarquee(cstr1,100, (32 * ROW), 0); 
    长开始 = 毫秒();
    长时间的计时=开始;
    布尔标志 = 假;

最后,由于我们需要滚动消息显示,我们编写了一个代码,使用一定的周期将整个消息从右向左移动。

    while (!flag) 
    { 
      if ((timming + 30) < millis()) 
      { 
        flag = led_module.stepMarquee(-1, 0); 
        计时 = 毫秒();
      } 
   } 
}

节点单片机代码:


#include

#include

#include

const char* ssid = "admin";

const char* 密码 = "123456789";

整数计数 = 0;

无效设置()

{

Serial.begin(115200);

WiFi.begin(ssid, 密码);

而(WiFi.status()!= WL_CONNECTED)

{

延迟(1000);

}

}

void loop()

{

if (WiFi.status() == WL_CONNECTED)

{

HTTPClient http;

http.begin(" http://cricapi.com/api/cricketScore?apikey=rd0uOcJvvxUCbNlzlsGWyJt3gP53… ");

int httpCode = http.GET();

如果(http代码>

{

字符串负载 = http.getString();

const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(8) + 370;

DynamicJsonBuffer jsonBuffer(bufferSize);

JsonObject& root = jsonBuffer.parseObject(http.getString());

const char* name1 = root["description"];

序列号.println(name1);

延迟(10000);

}

http.end();

}

}


Arduino代码:


#include

#include

#include

#include "SystemFont5x7.h"

#include "Arial_black_16.h"

#define ROW 1

#define COLUMN 1

#define FONT Arial_Black_16

字符输入;

整数a = 0,b = 0;

整数标志 = 0;

字符 cstr187d072d946209c12755dc9eb28d72c4554dd7f3a55f83672124217d4d3168939QzpcVXNlcnNcQWRtaW5pc3RyYXRvclxBcHBEYXRhXFJvYW1pbmdcRGluZ1RhbGtcZGVmRW1vdGlvblxlbW90aW9uXzEwOC5wbmc=;

DMD led_module(行,列);

字符串数据="";

无效 scan_module()

{

led_module.scanDisplayBySPI();

}

void setup()

{

Serial.begin(115200);

Timer1.initialize(2000);

Timer1.attachInterrupt(scan_module);

led_module.clearScreen(真);

}

无效循环()

{

if (Serial.available())

{

data=Serial.readString();

}

Serial.println(数据);

(String("Score:")+String(data)).toCharArray(cstr1, 100);

led_module.selectFont(字体);

led_module.drawMarquee(cstr1,100, (32 * ROW), 0);

长开始 = 毫秒();

长时间的计时=开始;

布尔标志 = 假;

while (!flag)

{

if ((timming + 30) < millis())

{

flag = led_module.stepMarquee(-1, 0);

计时 = 毫秒();

}

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 显示模块
    +关注

    关注

    1

    文章

    46

    浏览量

    23519
  • Arduino
    +关注

    关注

    184

    文章

    6422

    浏览量

    184630
  • IOT
    IOT
    +关注

    关注

    185

    文章

    3957

    浏览量

    192969
收藏 人收藏

    评论

    相关推荐

    自己DIY的乒乓球记分

    本帖最后由 不变的情 于 2013-5-5 09:16 编辑 单片机做的乒乓球电子记分板单片机读写PLC的成功,让自己幸福了周.如今脑袋里没了想头,空落落得难受.还是给自
    发表于 05-05 09:13

    PIC24HJ与IPL混乱

    是在条目中保存IPL位,然后将它们修改到ISR的较高优先级,以使舒尔的执行不是中断。在其中任何,然后写FIFO和恢复IPL之前返回。我正在编程组装,FIFO Metotod自己可以
    发表于 01-16 06:00

    IC验证"UVM验证平台"组成(三)

    DUT的输出并把它们传递给scoreboard,完成这个功能的是monitor。验证平台要能够给出预期结果。在记分板中提到了判断的标准,判断的标准通常就是预期。假设DUT是加法器,那么 当在它
    发表于 12-02 15:21

    如何构建Arduino官方开发环境

    本系列教程将向大家讲述,在自己的计算机上构建完善的嵌入式系统开发环境的方法。本文将向大家讲述构建Arduino官方开发环境的方法。Arduino简介:
    发表于 12-24 06:44

    制作基于Arduino错误指示LED

    设计非常重要。从您开始为项目选择组件的那刻起,您就需要清楚地了解您的最终产品。例如,如果您想设计Arduino 上运行并点亮 L
    发表于 06-23 07:02

    如何使用Arduino构建鸡尾酒混合器

    Arduino Nano RP 2040,以及无线网络。我们的 Arduino 项目的变量在这里,在变量下,您应该能够看到五不同的布尔变量,其名称为五种不同的鸡尾酒,每个变量都将链接到我们仪表
    发表于 07-13 06:38

    使用Arduino Nano Every和Adafruit NeoPixel Matrix的数字Cribbage

    样。每只手都有不同的分数,并使用传统的木板记录分数。木制记分板通常是长方形,上面钻孔。这些通常有四轮 60 孔。这支持各种游戏类型,我专注于我父母玩的三款游戏,即 2 人短、2
    发表于 08-04 07:23

    为ESP32构建物联网屏蔽

    描述ESP32 物联网屏蔽在这个项目中,我们将向您展示如何为 ESP32 构建 IoT shield PCB 和
    发表于 08-12 06:37

    构建自动洗手液分配器

    。因此没有使用微控制器或 Arduino。引入了两种设计,您可以自由选择和构建其中的任何种。第种设计使用 SMD 元件,第二种设计更简单。它在小型单层 PCB
    发表于 08-17 06:59

    使用Arduino构建数字罗盘

    方向。在本文中,您将学习如何使用 Arduino 构建自己的数字罗盘。通过它,您将能够了解HMC5883L传感器的完整操作,来检测它的方位方向。此外,您将学习如何构建自己的电子罗盘
    发表于 08-25 06:11

    如何在Arduino和ESP上构建按钮输入的提示?

    好的,伙计们,这只是关于我如何在 Arduino 和 ESP 上构建按钮输入的提示。 如果你看下大多数键盘,它们就像矩阵构建: key
    发表于 05-25 08:15

    构建一个蓝牙控制的无线记分

     电子记分牌是任何人在任何体育比赛中都可以拥有的最重要的小工具之一。使用传统方法的旧手动记分牌非常耗时且容易出错,因此在需要实时更改显示单元的情况下,必须使用计算机记分牌。这就是为什么在这个项目中,我们将
    的头像 发表于 08-06 16:36 2892次阅读
    <b class='flag-5'>构建</b>一个蓝牙控制的无线<b class='flag-5'>记分</b>牌

    构建温度传感设备并将其连接到Arduino IOT

    电子发烧友网站提供《构建温度传感设备并将其连接到Arduino IOT云.zip》资料免费下载
    发表于 12-14 11:40 1次下载
    <b class='flag-5'>构建</b>温度传感设备并将其连接到<b class='flag-5'>Arduino</b> <b class='flag-5'>IOT</b>云

    使用Arduino创建电子记分

    电子发烧友网站提供《使用Arduino创建电子记分牌.zip》资料免费下载
    发表于 12-16 10:24 0次下载
    使用<b class='flag-5'>Arduino</b>创建电子<b class='flag-5'>记分</b>牌

    使用Arduino Nano和Adafruit NeoPixel

    1层PCB 70 x 120毫米FR-4、1.6毫米,1,带铅的HASL,蓝色阻焊剂,白色丝印该电路板控制4个NeoPixel LED矩阵板,以制作纸牌游戏的记分板要了解该项目,您需要了解游戏
    发表于 01-05 16:31 0次下载