準(zhǔn)備工作
本系列物聯(lián)網(wǎng)開(kāi)發(fā)入門實(shí)戰(zhàn)教程中硬件選取樂(lè)鑫 ESP8266 開(kāi)發(fā)板,服務(wù)器采用樹(shù)莓派 3B+/4B 主板,云端物聯(lián)網(wǎng)平臺(tái)基于開(kāi)源EMQX社區(qū)版搭建,帶你完整體驗(yàn)物聯(lián)網(wǎng)場(chǎng)景端到端全棧開(kāi)發(fā)過(guò)程。
樂(lè)鑫?ESP8266:
樹(shù)莓派 4B:
01、樹(shù)莓派系統(tǒng)燒錄
樹(shù)莓派(Raspberry Pi)是一款基于ARM的微型電腦主板,以SD/MicroSD卡為內(nèi)存硬盤,卡片主板周圍有1/2/4個(gè)USB接口和一個(gè)10/100 以太網(wǎng)接口,可連接鍵盤、鼠標(biāo)和網(wǎng)線,同時(shí)擁有視頻模擬信號(hào)的電視輸出接口和HDMI高清視頻輸出接口,以上部件全部整合在一張僅比信用卡稍大的主板上,具備所有PC的基本功能只需接通電視機(jī)和鍵盤,就能執(zhí)行如電子表格、文字處理、玩游戲、播放高清視頻等諸多功能。
安裝燒錄工具
首先,打開(kāi)樹(shù)莓派官網(wǎng),根據(jù)你的電腦系統(tǒng)下載對(duì)應(yīng)燒錄工具 https://www.raspberrypi.com/software/
安裝 Raspberry Pi Imager后,打開(kāi)軟件,選擇 Raspberry Pi OS?(64-bit),并選擇存儲(chǔ)?MicroSD 卡。
點(diǎn)擊右下角的設(shè)置按鈕,進(jìn)行配置工作。
在高級(jí)設(shè)置頁(yè)面,你需要根據(jù)實(shí)際情況配置如下信息:
配置項(xiàng) | 參數(shù)值 |
主機(jī)名 | emqx.local |
SSH服務(wù) | 開(kāi)啟 |
username : emqx | |
密碼 :?emqx@123 | |
配置Wi-Fi | 熱點(diǎn)名?:?按實(shí)際情況配置 |
密碼?:?按實(shí)際情況配置 |
最后,點(diǎn)擊燒錄按鈕,開(kāi)始燒錄固件,直到燒錄完成。
02、安裝 EMQX 社區(qū)版
EMQX? 是一款完全開(kāi)源,高度可伸縮,高可用的分布式 MQTT 消息服務(wù)器,同時(shí)也支持 CoAP/LwM2M 協(xié)議,適用于 IoT、M2M?和移動(dòng)應(yīng)用程序。
EMQX 提供了高效可靠海量物聯(lián)網(wǎng)設(shè)備連接,可處理千萬(wàn)級(jí)別的并發(fā),實(shí)時(shí)處理消息和事件流數(shù)據(jù),幫助您快速構(gòu)建關(guān)鍵業(yè)務(wù)的物聯(lián)網(wǎng)平臺(tái)與應(yīng)用。
基于 APL 2.0 開(kāi)放源碼協(xié)議
完整 MQTT 3.1.0、3.1.1 和 5.0 規(guī)范,支持 MQTT-SN
Masterless 高可用集群架構(gòu)
高并發(fā)、低時(shí)延、高性能
可擴(kuò)展的網(wǎng)關(guān)和插件體系
因?yàn)闃?shù)莓派系統(tǒng)是基于 Debian?裁剪版,所以我們下載支持 Debian?操作系統(tǒng)的開(kāi)源社區(qū)版。操作步驟如下:
2.1?SSH登陸樹(shù)莓派:
ssh emqx@emqx.local
2.2 配置 EMQX Apt 源:
curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
2.3?安裝 EMQX:
sudo apt-get install emqx
2.4?啟動(dòng) EMQX:
sudo systemctl start emqx
控制臺(tái)完整操作過(guò)程如下:
Last login: Sat Aug 19 21:01:31 on console
iot$ ssh emqx@emqx.local
The authenticity of host 'emqx.local (***)' can't be established.
ECDSA key fingerprint is SHA256:***/ouBrME10.
Are you sure you want to continue connecting (yes/no)? yes
Warning:?Permanently?added?'emqx.local,***%en0'?(ECDSA)?to?the?list?of?known?hosts.
emqx@emqx.local's password:
Linux emqx 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed May 3 04:23:52 2023
emqx@emqx:~ $ curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
Detected operating system as debian/bullseye.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Running apt-get update... done.
Installing debian-archive-keyring which is needed for installing
apt-transport-https on many Debian systems.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/emqx_emqx.list...done.
Importing gpg key... done.
Running apt-get update... done.
The repository is setup! You can now install packages.
emqx@emqx:~/?$?sudo?apt-get?install?emqx
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following package was automatically installed and is no longer required:
libfuse2
Use 'sudo apt autoremove' to remove it.
The following NEW packages will be installed:
emqx
0 upgraded, 1 newly installed, 0 to remove and 96 not upgraded.
Need to get 39.9 MB of archives.
After this operation, 93.8 MB of additional disk space will be used.
Get:1 https://packages.emqx.com/emqx/emqx/debian bullseye/main arm64 emqx arm64 5.1.6 [39.9 MB]
Fetched 39.9 MB in 16s (2,523 kB/s)
Selecting previously unselected package emqx.
(Reading database ... 96881 files and directories currently installed.)
Preparing to unpack .../archives/emqx_5.1.6_arm64.deb ...
Unpacking emqx (5.1.6) ...
Setting up emqx (5.1.6) ...
?emqx
State: degraded
Jobs: 0 queued
Failed: 1 units
Since: Thu 1970-01-01 01:00:04 BST; 53 years 8 months ago
CGroup: /
├─user.slice
│ └─user-1000.slice
│ ├─user@1000.service …
│ │ ├─app.slice
│ │ │ ├─gvfs-goa-volume-monitor.service
│ │ │ │ └─1005 /usr/libexec/gvfs-goa-volume-monitor
│ │ │ ├─pulseaudio.service
│ │ │ │ └─687 /usr/bin/pulseaudio --daemonize=no --log-target=journal
│ │ │ ├─gvfs-daemon.service
│ │ │ │ ├─ 844 /usr/libexec/gvfsd
│ │ │ │ ├─ 849 /usr/libexec/gvfsd-fuse /run/user/1000/gvfs -f
│ │ │ │ └─1021 /usr/libexec/gvfsd-trash --spawner :1.7 /org/gtk/gvfs/exec_spaw/0
│ │ │ ├─gvfs-udisks2-volume-monitor.service
│ │ │ │ └─988 /usr/libexec/gvfs-udisks2-volume-monitor
│ │ │ ├─gvfs-gphoto2-volume-monitor.service
│ │ │ │ └─1009 /usr/libexec/gvfs-gphoto2-volume-monitor
│ │ │ ├─pipewire.service
│ │ │ │ ├─686 /usr/bin/pipewire
│ │ │ │ └─730 /usr/bin/pipewire-media-session
│ │ │ ├─dbus.service
│ │ │ │ └─715 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopid…
│ │ │ ├─gvfs-mtp-volume-monitor.service
│ │ │ │ └─995 /usr/libexec/gvfs-mtp-volume-monitor
│ │ │ └─gvfs-afc-volume-monitor.service
│ │ │ └─1013 /usr/libexec/gvfs-afc-volume-monitor
│ │ └─init.scope
│ │ ├─625 /lib/systemd/systemd --user
│ │ └─654 (sd-pam)
│ ├─session-3.scope
│ │ ├─563 /bin/login -f
│ │ └─708 -bash
│ ├─session-4.scope
│ │ ├─ 815 sshd: emqx [priv]
│ │ ├─1136 sshd: emqx@pts/0
│ │ ├─1137 -bash
│ │ ├─2478 sudo apt-get install emqx
│ │ ├─2479 apt-get install emqx
│ │ ├─2520 /usr/bin/dpkg --status-fd 32 --configure --pending
│ │ ├─2521 /bin/sh /var/lib/dpkg/info/emqx.postinst configure
│ │ └─2535 systemctl status --no-pager
│ └─session-1.scope
│ ├─615 lightdm --session-child 13 16
│ ├─703 /usr/bin/lxsession -s LXDE-pi -e LXDE -w openbox-lxde-pi
│ ├─789 /usr/bin/ssh-agent x-session-manager
│ ├─857 openbox --config-file /home/emqx/.config/openbox/lxde-pi-rc.xml
│ ├─861 lxpolkit
│ ├─863 lxpanel --profile LXDE-pi
│ ├─865 pcmanfm --desktop --profile LXDE-pi
│ ├─877 /usr/bin/ssh-agent -s
│ ├─881 /usr/bin/python3 /usr/share/system-config-printer/applet.py
│ ├─885 xcompmgr -aR
│ └─997 /usr/lib/menu-cache/menu-cached /run/user/1000/menu-cached-:0
├─init.scope
│ └─1 /sbin/init splash
└─system.slice
├─packagekit.service
│ └─1123 /usr/libexec/packagekitd
├─systemd-udevd.service
│ └─174 /lib/systemd/systemd-udevd
├─triggerhappy.service
│ └─445 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd…
├─cron.service
│ └─352 /usr/sbin/cron -f
├─polkit.service
│ └─371 /usr/libexec/polkitd --no-debug
├─rtkit-daemon.service
│ └─700 /usr/libexec/rtkit-daemon
├─bluetooth.service
│ └─788 /usr/libexec/bluetooth/bluetoothd
├─wpa_supplicant.service
│ └─449 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
├─lightdm.service
│ ├─540 /usr/sbin/lightdm
│ └─562 /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolist…
├─ModemManager.service
│ └─493 /usr/sbin/ModemManager
├─systemd-journald.service
│ └─139 /lib/systemd/systemd-journald
├─ssh.service
│ └─590 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
├─hciuart.service
│ └─746 /usr/bin/hciattach /dev/serial1 bcm43xx 3000000 flow - b8:27:eb:b8:c8:d0
├─rsyslog.service
│ └─417 /usr/sbin/rsyslogd -n -iNONE
├─dhcpcd.service
│ ├─436 /usr/sbin/dhcpcd -b -q
│ └─553 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0
├─rng-tools-debian.service
│ └─513 /usr/sbin/rngd -r /dev/hwrng
├─cups-browsed.service
│ └─592 /usr/sbin/cups-browsed
├─cups.service
│ └─523 /usr/sbin/cupsd -l
├─udisks2.service
│ └─447 /usr/libexec/udisks2/udisksd
├─dbus.service
│ └─354 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --…
├─systemd-timesyncd.service
│ └─282 /lib/systemd/systemd-timesyncd
├─avahi-daemon.service
│ ├─345 avahi-daemon: running [emqx.local]
│ └─363 avahi-daemon: chroot helper
└─systemd-logind.service
└─442 /lib/systemd/systemd-logind
Created symlink /etc/systemd/system/multi-user.target.wants/emqx.service → /lib/systemd/system/emqx.service.
emqx@emqx:~/ $ sudo systemctl start emqx
啟動(dòng)EMQX 服務(wù)后,你可以通過(guò)瀏覽器訪問(wèn) http://emqx.local:18083/? 來(lái)登錄 EMQX Dashboard 管理控制臺(tái),進(jìn)行設(shè)備連接與相關(guān)指標(biāo)監(jiān)控管理,默認(rèn)用戶名及密碼:admin /public 。
EMQX 系統(tǒng)登錄頁(yè)面
EMQX 管理控制臺(tái)概覽
03、配置和驗(yàn)證?EMQX?
設(shè)備通過(guò) MQTT 協(xié)議接入 EMQX 平臺(tái)需要有合法身份認(rèn)證信息,因此你需要在控制臺(tái)配置客戶端認(rèn)證信息。
首先,接入客戶端認(rèn)證頁(yè)面,選擇Password Based認(rèn)證方式,用內(nèi)置數(shù)據(jù)庫(kù) Mnesia 作為數(shù)據(jù)源,配置參數(shù)采用默認(rèn)方式。
其次,你需要在內(nèi)置數(shù)據(jù)中添加一個(gè)用戶身份(username/password)。在用戶管理里可以查看到已添加的用戶。
MQTTX 工具
MQTTX 是由 EMQ 開(kāi)發(fā)的一款開(kāi)源跨平臺(tái) MQTT 5.0 桌面客戶端,它兼容 macOS,Linux 以及 Windows 系統(tǒng)。
MQTTX 的用戶界面 UI 采用聊天式設(shè)計(jì),使得操作邏輯更加簡(jiǎn)明直觀。它支持用戶快速創(chuàng)建和保存多個(gè) MQTT 連接,便于測(cè)試 MQTT/MQTTS 連接,以及 MQTT 消息的訂閱和發(fā)布。
采用聊天界面設(shè)計(jì),使得操作更加簡(jiǎn)單明了
跨平臺(tái)兼容,支持在 Windows,macOS,Linux 系統(tǒng)上運(yùn)行
100% 兼容 MQTT v5.0,v3.1.1 和 v3.1 協(xié)議
訂閱的 MQTT 主題支持自定義顏色標(biāo)簽
支持單向和雙向 SSL 認(rèn)證,同時(shí)支持 CA 和自簽名證書(shū)
支持通過(guò) WebSocket 連接 MQTT 服務(wù)器
支持 Hex, Base64, JSON, Plaintext 等 Payload 格式轉(zhuǎn)換
自定義腳本支持模擬 MQTT 發(fā)布/訂閱測(cè)試
提供完整的日志記錄功能
多語(yǔ)言支持:簡(jiǎn)體中文、英語(yǔ)、日語(yǔ)、土耳其語(yǔ)及匈牙利語(yǔ)
自由切換 Light、Dark、Night 三種主題模式
打開(kāi) MQTTX 客戶端進(jìn)入創(chuàng)建頁(yè)面,首先,你需要填寫(xiě)客戶端的相關(guān)信息,包括clientId,MQTT服務(wù)器地址,用戶名和密碼。然后,點(diǎn)擊右上角連接按鈕建立MQTT連接。
你可以給指定的Topic發(fā)送一條消息。
你也可以訂閱指定的Topic。
回到EMQX 控制臺(tái),你會(huì)看到當(dāng)前連接的客戶端Id、用戶名、狀態(tài)、以及 MQTT CONNECT 報(bào)文配置參數(shù)。
進(jìn)入設(shè)備詳情頁(yè)面,你可以查看消息發(fā)送和接收情況,當(dāng)前訂閱消息主題列表。
至此,你已經(jīng)成功的在樹(shù)莓派上部署了 EMQX 服務(wù),并通過(guò) MQTTX 工具模擬了物聯(lián)網(wǎng)設(shè)備和云端 MQTT 服務(wù)器通信的過(guò)程。