今天我們將使用 NodeMCU 和 P10 顯示模塊構(gòu)建一個基于 IoT 和 Arduino 的 IPL 記分板,它足夠大,可以顯示實時比分,而且制作起來非常簡單。
構(gòu)建物聯(lián)網(wǎng)計分板所需的組件
項目比較簡單,需要的組件也不多。只需收集下面列出的物品。
Arduino納米
ESP8266 NodeMCU
性能板
男性和女性標(biāo)題
9V 直流,2 安培電源
5 安培、3 安培 SMPS
連接線
基于節(jié)點 MCU 和 Arduino 的物聯(lián)網(wǎng)記分板工作
該項目的完整工作如上面的框圖所示。在這里,“ CRICAPI ”API 服務(wù)用于獲取實時 IPL 分?jǐn)?shù),然后由 ESP8266 nodeMCU 解碼并再次發(fā)送到控制顯示的Arduino Nano 。在這里,串行通信用于將信息從NodeMCU發(fā)送到 Arduino Uno。然后Arduino將需要顯示的所需信息發(fā)送到p10顯示器。
P10 LED 顯示模塊是一種非常流行的矩陣顯示器,用于宣傳戶外或室內(nèi)條件。每個 p10 顯示模塊共有 512 個高亮度 LED,安裝在塑料外殼上,旨在實現(xiàn)最佳顯示效果。任何數(shù)量的此類面板可以組合成任何行和列結(jié)構(gòu),以設(shè)計 LED 通知/廣告板。32*16 模塊尺寸意味著每行有 32 個 LED,每列有 16 個 LED。因此,每個模塊單元中有 512 個 LED。
這個模塊有很多特點,比如它總共有512個LED,這使得制作廣告牌非???,并且在我們需要展示的地方都需要它。它的總亮度為 3500-4500 尼特,因此您可以在光天化日之下非常清楚地看到它。它有一個最大值。功耗為 20W,因此可以由小型開關(guān)電源模塊供電。它還需要一個單獨的 5V 電源為邏輯部分供電。它具有 IP65 防水等級,因此可以在潮濕和雨天的戶外輕松使用。
P10顯示模塊引腳說明:
Enable:此引腳用于通過向 LED 面板提供 PWM 脈沖來控制 LED 面板的亮度。
A、B:這些稱為多路復(fù)用選擇引腳。它們采用數(shù)字輸入來選擇任何多路復(fù)用行。
移位時鐘 (CLK)、存儲時鐘 (SCLK) 和數(shù)據(jù):這些是正常的移位寄存器控制引腳。這里使用移位寄存器74HC595。
P10顯示模塊接線圖:
Arduino UNO 和 P10 顯示模塊按照如下所示的引腳映射互連:
重要的提示:
將 P10 模塊的電源端子單獨連接到 5V DC SMPS。建議將 5V、3 Amp 直流電源連接到單個 P10 LED 模塊。如果您計劃連接更多模塊,請相應(yīng)提高您的 SMPS 額定值。
基于 NodeMCU 和 IoT 的實時計分板 - 示意圖
基于物聯(lián)網(wǎng)的實時計分板的完整示意圖如上所示。如電路圖所示,首先將一個 9V 直流電源連接到 Arduino Nano,然后將來自 Arduino 的穩(wěn)壓 5V 直流電源提供給 NodeMCU。對于 Arduino 和 NodeMCU 之間的通信,使用 TX 和 RX 引腳,如圖所示連接。最后,按照上圖所示的電路圖,將 P10 顯示器連接到 Arduino。
在這個項目中,所有的連接都按照上圖進(jìn)行并焊接在穿孔板上。完成電路圖后,電路板如下圖所示:
連接成功后,我已將板子連接到 p10 顯示器并將電路封裝在外殼中,如下圖所示:
基于物聯(lián)網(wǎng)的記分板的軟件設(shè)置
在成功設(shè)置硬件之后,現(xiàn)在是時候在編寫代碼之前設(shè)置軟件部分了。首先,需要完成 API 設(shè)置。為此,請訪問 URL:https ://www.cricapi.com/并注冊以創(chuàng)建一個新帳戶。我們也可以使用我們的 Google 帳戶登錄。
登錄您的 CricAPI 帳戶,每天最多可免費獲得 100 次點擊。儀表板如下所示:
單擊“ Test CricAPI ”選項并轉(zhuǎn)到“ Cricket score ”選項。將出現(xiàn)一個窗口,如下所示,其中包含 URL 和示例輸出。復(fù)制 URL 以供我們將來參考。我在印度,我喜歡板球,所以我將其配置為顯示板球得分。如果您希望它為任何其他目的配置它,您可以通過稍微更改代碼來輕松完成。
基于 NodeMCU 和 IoT 的 Live Cricket Board 代碼
在本節(jié)中,我們將討論從 HTTP 網(wǎng)站獲取數(shù)據(jù)并將其顯示到 P10 顯示器所需的代碼,因為我們使用的是 NodeMCU 和 Arduino,因此這些將分為兩個部分。第一個 Arduino 代碼配置 NodeMCU,第二個配置 Arduino Nano。
設(shè)置 NodeMCU 以上傳代碼:
如果您是第一次將代碼上傳到 nodeMCU,那么您必須先包含板,使用以下步驟。
要將代碼上傳到 NodeMCU,請按照以下步驟操作:
1.打開 Arduino IDE,然后轉(zhuǎn)到File–》Preferences–》Settings。
2.在 “Additional Board Manager URL ”字段中輸入https://arduino.esp8266.com/stable/package_esp8266com_index.json并單擊“Ok”。
3.現(xiàn)在,轉(zhuǎn)到工具 》 板 》 板管理器。在 Boards Manager 窗口中,在搜索框中鍵入ESP 8266,選擇最新版本的開發(fā)板,然后單擊安裝。
4.安裝完成后,進(jìn)入Tools -》 Board -》 選擇NodeMCU 1.0(ESP-12E Module)。現(xiàn)在您可以使用 Arduino IDE 對 NodeMCU 進(jìn)行編程。
完成上述步驟后,現(xiàn)在可以將代碼上傳到 NodeMCU,完整的代碼需要上傳到 NodeMCU。首先,所有必需的庫文件都將包含在代碼中。這里,在這個項目中,ESP8266WiFi.h和ESP8266HTTPClient.h用于使用 ESP8266 NodeMCU Wi-Fi 模塊,ArduinoJson.h用于使用 JSON 庫,用于從 CricAPI 接收信息。
#include#include #include
現(xiàn)在,定義了網(wǎng)絡(luò)憑據(jù),即 SSID 和密碼。需要將 NodeMCU 連接到互聯(lián)網(wǎng)。
const char* ssid = "管理員"; const char* 密碼 = "123456789";
然后,為了將 nodeMCU 連接到互聯(lián)網(wǎng),調(diào)用 WiFi.begin并將 SSID 和密碼作為其參數(shù)。此外,使用波特率 = 115200 初始化串行通信。
Serial.begin(115200); WiiFi.begin(ssid,密碼);
在 loop() 內(nèi)部,傳遞我們之前記下的 API URL,以獲取實時板球比分。在http.begin() 函數(shù)中獲取信息。
http.begin("http://cricapi.com/api/cricketScore?apikey=rd0uOcJvvxUCbNlzlsGWyJt3gP53&unique_id=1254075");
現(xiàn)在,通過讀取并在串行監(jiān)視器上打印 JSON 數(shù)據(jù)來驗證接收到的 JSON 文件。然后如果接收到的數(shù)據(jù)是正確的,將其打印在 Serial 上以將其發(fā)送到 Arduino。
int httpCode = http.GET(); if (httpCode > 0) { 字符串負(fù)載 = 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。成功上傳后,現(xiàn)在是時候為 Arduino 編寫代碼了。
對 Arduino Nano 進(jìn)行編程:
與 NodeMCU 類似,我們需要先對 Arduino 進(jìn)行編程,然后才能繼續(xù)前進(jìn)并完成代碼。
對于 Arduino Nano,我們必須包含應(yīng)用程序中使用的所有庫。這里,代碼中使用了“DMD.h”庫和“TimerOne.h”,這兩個庫都可以通過下面給出的鏈接下載。
從 GitHub 下載 DMD.h 庫
從 GitHub 下載 TimerOne.h 庫
下載并包含這兩個庫后,通過包含所有必需的庫來啟動代碼。
#include#include #include #include "SystemFont5x7.h" #include "Arial_black_16.h"
在下一步中,為 LED 矩陣定義行數(shù)和列數(shù)。這里本項目只用到了一個模塊,所以ROW值和COLUMN值都可以定義為1。
#define ROW 1 #define COLUMN 1 #define FONT Arial_Black_16 DMD led_module(ROW, COLUMN);
定義了一個函數(shù)scan_module(),它通過 SPI 終端持續(xù)檢查來自 Arduino Nano 的任何傳入數(shù)據(jù)。如果是,那么它將觸發(fā)中斷以執(zhí)行用戶在程序中定義的某些事件。
無效 scan_module() { led_module.scanDisplayBySPI(); }
在setup()內(nèi)部,定時器被初始化,中斷被附加到函數(shù)scan_module,這在前面已經(jīng)討論過了。最初,使用函數(shù)clear screen(true) 清除屏幕,這意味著所有像素都定義為 OFF。
在這里,串行通信也啟用了串行功能。begin(115200)其中 115200 是串行通信的波特率。
無效設(shè)置() { Serial.begin(115200); Timer1.initialize(2000); Timer1.attachInterrupt(scan_module); led_module.clearScreen(真); }
在這里,檢查串行數(shù)據(jù)的可用性,是否有來自 nodeMCU 的有??效數(shù)據(jù)。接收到的數(shù)據(jù)存儲在一個變量中,然后打印在 p10 顯示器上。
無效循環(huán)() { 如果(Serial.available()) { 數(shù)據(jù)=Serial.readString(); } Serial.println(數(shù)據(jù)); (String("Score:")+String(data)).toCharArray(cstr1, 100); led_module.selectFont(字體);
然后,為了在模塊中顯示信息,使用selectFont()函數(shù)選擇字體。然后drawMarquee()函數(shù)用于在 p10 板上顯示所需的信息。
led_module.drawMarquee(cstr1,100, (32 * ROW), 0); 長開始 = 毫秒(); 長時間的計時=開始; 布爾標(biāo)志 = 假;
最后,由于我們需要滾動消息顯示,我們編寫了一個代碼,使用一定的周期將整個消息從右向左移動。
while (!flag) { if ((timming + 30) < millis()) { flag = led_module.stepMarquee(-1, 0); 計時 = 毫秒(); } } }
節(jié)點單片機(jī)代碼:
#include
#include
#include
const char* ssid = "admin";
const char* 密碼 = "123456789";
整數(shù)計數(shù) = 0;
無效設(shè)置()
{
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代碼>
{
字符串負(fù)載 = 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
字符輸入;
整數(shù)a = 0,b = 0;
整數(shù)標(biāo)志 = 0;
字符 cstr1;
DMD led_module(行,列);
字符串?dāng)?shù)據(jù)="";
無效 scan_module()
{
led_module.scanDisplayBySPI();
}
void setup()
{
Serial.begin(115200);
Timer1.initialize(2000);
Timer1.attachInterrupt(scan_module);
led_module.clearScreen(真);
}
無效循環(huán)()
{
if (Serial.available())
{
data=Serial.readString();
}
Serial.println(數(shù)據(jù));
(String("Score:")+String(data)).toCharArray(cstr1, 100);
led_module.selectFont(字體);
led_module.drawMarquee(cstr1,100, (32 * ROW), 0);
長開始 = 毫秒();
長時間的計時=開始;
布爾標(biāo)志 = 假;
while (!flag)
{
if ((timming + 30) < millis())
{
flag = led_module.stepMarquee(-1, 0);
計時 = 毫秒();
}
}
}
-
顯示模塊
+關(guān)注
關(guān)注
1文章
53瀏覽量
23707 -
Arduino
+關(guān)注
關(guān)注
188文章
6485瀏覽量
189712 -
IOT
+關(guān)注
關(guān)注
187文章
4268瀏覽量
200088
發(fā)布評論請先 登錄
相關(guān)推薦
如何使用Arduino構(gòu)建一個計算器

如何構(gòu)建Arduino官方開發(fā)環(huán)境
使用Arduino Nano Every和Adafruit NeoPixel Matrix的數(shù)字Cribbage板
使用Arduino構(gòu)建一個數(shù)字羅盤
TCL液晶IPL32C電源與逆變器板維修

如何使用Arduino構(gòu)建一個電子動畫眼睛

構(gòu)建一個藍(lán)牙控制的無線記分牌

如何使用Arduino構(gòu)建一個無線門鈴

使用Arduino構(gòu)建一個摩爾斯電碼轉(zhuǎn)換器

使用Arduino開發(fā)板構(gòu)建室內(nèi)花園

構(gòu)建一個Arduino交通燈模塊

構(gòu)建溫度傳感設(shè)備并將其連接到Arduino IOT云

使用Arduino創(chuàng)建電子記分牌

使用Arduino Nano和Adafruit NeoPixel
構(gòu)建一個帶Arduino代碼的顏色檢測器電路

評論