前言
从事物联网开发的小伙伴们,要mqtt发布与订阅消息,需要去配置复杂的协议,来连接如阿里云、onenet等服务器。
这里我向大家展示一下用鲁班猫建立自己的mqtt服务器,大家就可以拥有自己的MQTT服务器,以后实验物联网,或者家居综合控制,用这个一台鲁班猫就可以轻松解决了,而且节能环保!
项目材料
- 鲁班猫卡片电脑
- 64G TF卡
- EMQX开源软件
- 鲁班猫ubuntu22.0固件
- 无线键盘鼠标、显示器等
配置运行环境
- 下载鲁班猫固件以及烧写工具
百度云链接:https://pan.baidu.com/s/19t8AZV9SYTdjn2uObBiSGA
提取码:hslu
-
烧写固件到SD卡上
烧写工具在开发软件目录下面的SDDiskTool_v1.7。解压后打开如下图:
固件在文件夹3-Linux镜像\Ubuntu系统镜像\通用镜像(extboot)-适用于所有板卡下面,我这里选择桌面版。
选择好升级固件:
选择SD启动后,点击开始创建
然后耐心等待写入完毕。
-
把SD卡插到鲁班猫SD卡接口,上电。用TypeC转USBA接上无线键盘鼠标。用HDMI线接好显示器。
-
开机到出现登录窗口,默认用户名是cat,密码是temppwd:
-
进入桌面后,先配置wifi,按下图标注连接自己的路由器:
输入路由器密码,点connect
稍等一会就会显示已连。
-
查看自己的IP地址,打开终端,输入ifconfig:
到此环境配置就告一段落。
安装emqx
-
执行sudo apt update。
-
配置 EMQX Apt 源
cat@lubancat:~$ curl -s https:
Detected operating system as Ubuntu/jammy.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Running apt-get update... done.
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.
3.安装 EMQX:
cat@lubancat:~$ sudo apt install emqx
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
accountsservice-ubuntu-schemas activity-log-manager apg aptdaemon aptdaemon-data cracklib-runtime gedit
gedit-common gir1.2-accountsservice-1.0 gir1.2-adw-1 gir1.2-gck-1 gir1.2-gcr-3 gir1.2-gdesktopenums-3.0
gir1.2-gdm-1.0 gir1.2-geoclue-2.0 gir1.2-gnomebluetooth-3.0 gir1.2-gnomedesktop-3.0 gir1.2-graphene-1.0
gir1.2-gtk-4.0 gir1.2-gtksource-4 gir1.2-gweather-3.0 gir1.2-javascriptcoregtk-4.0 gir1.2-json-1.0
gir1.2-mutter-10 gir1.2-nma-1.0 gir1.2-peas-1.0 gir1.2-rsvg-2.0 gir1.2-soup-2.4 gir1.2-upowerglib-1.0
gir1.2-vte-2.91 gkbd-capplet gnome-bluetooth-3-common gnome-bluetooth-common gnome-control-center-data
gnome-control-center-faces gnome-menus gnome-remote-desktop gnome-settings-daemon gnome-shell-common
gsfonts imagemagick-6-common language-selector-gnome libabsl20210324 libadwaita-1-0 libcolord-gtk1
libcrack2 libdca0 libde265-0 libdee-1.0-4 libdjvulibre-text libdjvulibre21 libebackend-1.2-10
libebook-1.2-20 libebook-contacts-1.2-3 libedata-book-1.2-26 libedata-cal-2.0-1 libfaad2
libfftw3-double3 libfluidsynth3 libfreeaptx0 libfreerdp-client2-2 libfreerdp-server2-2 libfreerdp2-2
libgdm1 libgeoclue-2-0 libgeocode-glib0 libgeonames-common libgeonames0 libgjs0g libgnome-autoar-0-0
libgnome-bluetooth-3.0-13 libgnome-bluetooth13 libgnome-menu-3-0 libgnomekbd8 libgsound0 libgspell-1-2
libgspell-1-common libgssdp-1.2-0 libgtksourceview-4-0 libgtksourceview-4-common libgupnp-1.2-1
libgupnp-av-1.0-3 libgupnp-igd-1.0-4 libgweather-3-16 libgweather-common libheif1 libinstpatch-1.0-2
libjxr-tools libjxr0 libkate1 liblqr-1-0 libltc11 libmagickcore-6.q16-6 libmagickcore-6.q16-6-extra
libmagickwand-6.q16-6 libmediaart-2.0-0 libmjpegutils-2.1-0 libmodplug1 libmozjs-102-0 libmpcdec6
libmpeg2encpp-2.1-0 libmplex2-2.1-0 libmutter-10-0 libnice10 libopenh264-6 libopenni2-0 libpeas-1.0-0
libpeas-common libphonenumber8 libprotobuf23 libpulsedsp libpwquality-common libpwquality1 libqrencode4
libqt5multimedia5 libqt5multimediaquick5 libqt5multimediawidgets5 librest-0.7-0 librygel-core-2.6-2
librygel-db-2.6-2 librygel-renderer-2.6-2 librygel-server-2.6-2 libsoundtouch1 libsoup-gnome2.4-1
libspandsp2 libspeexdsp1 libsrtp2-1 libtimezonemap-data libtimezonemap1 libtumbler-1-0
libunity-control-center1 libvncserver1 libvo-aacenc0 libvo-amrwbenc0 libwhoopsie-preferences0
libwildmidi2 libwinpr2-2 libwmflite-0.2-7 libxcb-xv0 libxcvt0 libzbar0 libzeitgeist-2.0-0 libzxingcore1
mutter-common power-profiles-daemon pulseaudio-utils python3-aptdaemon python3-aptdaemon.gtk3widgets
python3-chardet python3-defer python3-macaroonbakery python3-nacl python3-protobuf python3-pymacaroons
python3-requests python3-rfc3339 python3-tz qml-module-qtmultimedia switcheroo-control
timgm6mb-soundfont tumbler-common ubuntu-wallpapers ubuntu-wallpapers-jammy whoopsie
whoopsie-preferences xwayland yaru-theme-gnome-shell zeitgeist-core zenity-common
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
emqx
0 upgraded, 1 newly installed, 0 to remove and 89 not upgraded.
Need to get 38.9 MB of archives.
After this operation, 89.2 MB of additional disk space will be used.
Get:1 https:
Fetched 38.9 MB in 15s (2577 kB/s)
Selecting previously unselected package emqx.
(Reading database ... 155061 files and directories currently installed.)
Preparing to unpack .../archives/emqx_5.0.22_arm64.deb ...
Unpacking emqx (5.0.22) ...
Setting up emqx (5.0.22) ...
Adding group `emqx' (GID 135) ...
Done.
Adding system user `emqx' (UID 126) ...
Adding new user `emqx' (UID 126) with group `emqx' ...
Not creating home directory `/var/lib/emqx'.
● lubancat
State: degraded
Jobs: 0 queued
Failed: 4 units
Since: Fri 2017-08-04 17:00:11 CST; 5 years 8 months ago
CGroup: /
├─user.slice
│ └─user-1000.slice
│ ├─user@1000.service …
│ │ ├─session.slice
│ │ │ ├─xdg-document-portal.service
│ │ │ │ ├─1031 /usr/libexec/xdg-document-portal
│ │ │ │ └─1042 fusermount3 -o rw,nosuid,nodev,fsname=portal,auto_unmount,subtype=portal -- /ru…
│ │ │ ├─xdg-desktop-portal.service
│ │ │ │ └─1022 /usr/libexec/xdg-desktop-portal
│ │ │ ├─pipewire-media-session.service
│ │ │ │ └─860 /usr/bin/pipewire-media-session
│ │ │ └─pipewire.service
│ │ │ └─859 /usr/bin/pipewire
│ │ ├─app.slice
│ │ │ ├─gvfs-goa-volume-monitor.service
│ │ │ │ └─2848 /usr/libexec/gvfs-goa-volume-monitor
│ │ │ ├─xdg-permission-store.service
│ │ │ │ └─1036 /usr/libexec/xdg-permission-store
│ │ │ ├─dconf.service
│ │ │ │ └─2812 /usr/libexec/dconf-service
│ │ │ ├─gvfs-daemon.service
│ │ │ │ ├─ 979 /usr/libexec/gvfsd
│ │ │ │ ├─1225 /usr/libexec/gvfsd-trash --spawner :1.8 /org/gtk/gvfs/exec_spaw/0
│ │ │ │ ├─2868 /usr/libexec/gvfsd-network --spawner :1.8 /org/gtk/gvfs/exec_spaw/1
│ │ │ │ └─2883 /usr/libexec/gvfsd-dnssd --spawner :1.8 /org/gtk/gvfs/exec_spaw/3
│ │ │ ├─gvfs-udisks2-volume-monitor.service
│ │ │ │ └─2839 /usr/libexec/gvfs-udisks2-volume-monitor
│ │ │ ├─xfce4-notifyd.service
│ │ │ │ └─1193 /usr/lib/aarch64-linux-gnu/xfce4/notifyd/xfce4-notifyd
│ │ │ ├─gvfs-gphoto2-volume-monitor.service
│ │ │ │ └─2844 /usr/libexec/gvfs-gphoto2-volume-monitor
│ │ │ ├─xdg-desktop-portal-gtk.service
│ │ │ │ └─1046 /usr/libexec/xdg-desktop-portal-gtk
│ │ │ ├─obex.service
│ │ │ │ └─1311 /usr/lib/bluetooth/obexd
│ │ │ ├─at-spi-dbus-bus.service
│ │ │ │ ├─1000 /usr/libexec/at-spi-bus-launcher
│ │ │ │ ├─1006 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.co…
│ │ │ │ └─1019 /usr/libexec/at-spi2-registryd --use-gnome-session
│ │ │ ├─dbus.service
│ │ │ │ ├─ 867 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --system…
│ │ │ │ ├─ 995 /usr/libexec/ibus-portal
│ │ │ │ ├─1015 /usr/lib/aarch64-linux-gnu/xfce4/xfconf/xfconfd
│ │ │ │ └─1032 /usr/bin/xfce4-screensaver
│ │ │ ├─gvfs-mtp-volume-monitor.service
│ │ │ │ └─2852 /usr/libexec/gvfs-mtp-volume-monitor
│ │ │ └─gvfs-afc-volume-monitor.service
│ │ │ └─2856 /usr/libexec/gvfs-afc-volume-monitor
│ │ └─init.scope
│ │ ├─849 /lib/systemd/systemd --user
│ │ └─853 (sd-pam)
│ ├─session-c4.scope
│ │ ├─1413 sshd: cat [priv]
│ │ ├─1578 sshd: cat@notty
│ │ └─1580 /usr/lib/openssh/sftp-server
│ ├─session-c2.scope
│ │ ├─ 720 lightdm --session-child 12 19
│ │ ├─ 863 /usr/bin/gnome-keyring-daemon --daemonize --login
│ │ ├─ 870 xfce4-session
│ │ ├─ 967 /usr/bin/ibus-daemon --daemonize --xim
│ │ ├─ 986 /usr/libexec/ibus-dconf
│ │ ├─ 987 /usr/libexec/ibus-ui-gtk3
│ │ ├─ 988 /usr/libexec/ibus-extension-gtk3
│ │ ├─ 992 /usr/libexec/ibus-x11 --kill-daemon
│ │ ├─1061 /usr/libexec/ibus-engine-simple
│ │ ├─1070 xfwm4 --replace
│ │ ├─1096 xfsettingsd
│ │ ├─1141 xfce4-panel
│ │ ├─1145 Thunar --daemon
│ │ ├─1150 /usr/lib/aarch64-linux-gnu/xfce4/panel/wrapper-2.0 /usr/lib/aarch64-linux-gnu/xfce4…
│ │ ├─1151 xfdesktop
│ │ ├─1152 /usr/lib/aarch64-linux-gnu/xfce4/panel/wrapper-2.0 /usr/lib/aarch64-linux-gnu/xfce4…
│ │ ├─1153 /usr/lib/aarch64-linux-gnu/xfce4/panel/wrapper-2.0 /usr/lib/aarch64-linux-gnu/xfce4…
│ │ ├─1154 /usr/lib/aarch64-linux-gnu/xfce4/panel/wrapper-2.0 /usr/lib/aarch64-linux-gnu/xfce4…
│ │ ├─1155 /usr/lib/aarch64-linux-gnu/xfce4/panel/wrapper-2.0 /usr/lib/aarch64-linux-gnu/xfce4…
│ │ ├─1156 /usr/lib/aarch64-linux-gnu/xfce4/panel/wrapper-2.0 /usr/lib/aarch64-linux-gnu/xfce4…
│ │ ├─1201 xfce4-power-manager
│ │ ├─1208 /usr/bin/python3 /usr/share/system-config-printer/applet.py
│ │ ├─1210 nm-applet
│ │ ├─1212 xcape -e Super_L Control_L Escape
│ │ ├─1220 /usr/bin/python3 /usr/bin/blueman-applet
│ │ ├─1224 /usr/libexec/geoclue-2.0/demos/agent
│ │ ├─1231 xiccd
│ │ ├─1233 /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1
│ │ ├─1240 /usr/libexec/ayatana-indicator-application/ayatana-indicator-application-service
│ │ ├─1313 /usr/bin/python3 /usr/bin/blueman-tray
│ │ ├─2989 /usr/bin/xfce4-terminal
│ │ └─3014 bash
│ └─session-c3.scope
│ ├─1406 sshd: cat [priv]
│ ├─1489 sshd: cat@pts/0
│ ├─1492 -bash
│ ├─3082 sudo apt install emqx
│ ├─3087 sudo apt install emqx
│ ├─3088 apt install emqx
│ ├─3145 /usr/bin/dpkg --status-fd 51 --configure --pending
│ ├─3146 /bin/sh /var/lib/dpkg/info/emqx.postinst configure
│ └─3200 systemctl status --no-pager
├─init.scope
│ └─1 /sbin/init
└─system.slice
├─packagekit.service
│ └─2029 /usr/libexec/packagekitd
├─systemd-udevd.service
│ └─181 /lib/systemd/systemd-udevd
├─rkaiq_3A.service
│ ├─409 /usr/bin/rkaiq_3A_server
│ └─410 logger -t rkaiq
├─triggerhappy.service
│ └─403 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user…
├─cron.service
│ └─377 /usr/sbin/cron -f -P
├─system-serial\\x2dgetty.slice
│ └─serial-getty@ttyFIQ0.service
│ └─524 /sbin/agetty -o -p -- \\u --keep-baud 115200,38400,9600 ttyFIQ0 vt220
├─polkit.service
│ └─386 /usr/libexec/polkitd --no-debug
├─rtkit-daemon.service
│ └─663 /usr/libexec/rtkit-daemon
├─bluetooth.service
│ └─376 /usr/lib/bluetooth/bluetoothd
├─accounts-daemon.service
│ └─371 /usr/libexec/accounts-daemon
├─wpa_supplicant.service
│ └─405 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
├─lightdm.service
│ ├─530 /usr/sbin/lightdm
│ └─552 /usr/lib/xorg/Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp v…
├─ModemManager.service
│ └─515 /usr/sbin/ModemManager
├─systemd-journald.service
│ └─136 /lib/systemd/systemd-journald
├─power-profiles-daemon.service
│ └─387 /usr/libexec/power-profiles-daemon
├─unattended-upgrades.service
│ └─505 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for…
├─ssh.service
│ └─549 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
├─fwupd.service
│ └─3030 /usr/libexec/fwupd/fwupd
├─colord.service
│ └─1251 /usr/libexec/colord
├─bluez-alsa.service
│ └─494 /usr/bin/bluealsa
├─NetworkManager.service
│ └─379 /usr/sbin/NetworkManager --no-daemon
├─switcheroo-control.service
│ └─401 /usr/libexec/switcheroo-control
├─vsftpd.service
│ └─513 /usr/sbin/vsftpd /etc/vsftpd.conf
├─rsyslog.service
│ └─394 /usr/sbin/rsyslogd -n -iNONE
├─kerneloops.service
│ ├─531 /usr/sbin/kerneloops --test
│ └─533 /usr/sbin/kerneloops
├─cups-browsed.service
│ └─1338 /usr/sbin/cups-browsed
├─cups.service
│ └─1337 /usr/sbin/cupsd -l
├─upower.service
│ └─1099 /usr/libexec/upowerd
├─systemd-resolved.service
│ └─354 /lib/systemd/systemd-resolved
├─udisks2.service
│ └─404 /usr/libexec/udisks2/udisksd
├─ntp.service
│ └─529 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 106:114
├─dbus.service
│ └─378 @dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --s…
├─system-getty.slice
│ └─getty@tty1.service
│ └─535 /sbin/agetty -o -p -- \\u --noclear tty1 linux
├─avahi-daemon.service
│ ├─374 avahi-daemon: running [lubancat.local]
│ └─407 avahi-daemon: chroot helper
└─systemd-logind.service
└─402 /lib/systemd/systemd-logind
Created symlink /etc/systemd/system/multi-user.target.wants/emqx.service → /lib/systemd/system/emqx.service.
4、运行emqx:
cat@lubancat:~$ sudo systemctl start emqx
cat@lubancat:~$
至此,emqx就成功安装了。
配置emqx服务器
1.登录emqx控制台,输入鲁班猫IP加端口18083,就进入控制台界面:
初始用户名为admin,密码为public
第一次进入,要求重置密码,输入两次:
这样我们就进入控制台了:
设置中文:
点击language选择简体中文
然后点击applay使应用生效:
界面就变成中文的了:
测试
1、管理页面测试
从左侧菜单进行WebSocket客户端:
如下图,我们选择mqtt3.1.1,连接到服务器,然后订阅他默认的主题,然后发送一个数据,在下面的监控,我们就看到收发到的数据了,说明服务器搭建成功:
2、从另一台电脑测试
我们打开一个MQTTx,按下图填好参数,并连接
新建一个订阅主题:
新建一个发布主题,填入容后点发布,这样就把数据发送出云了,同时也接收了服务器发出的测试:
同时在服务器监控页面,也收到了发布的数据:
在连接的菜单中,我们点击刷新,就可以看到目前的活连:
在这里我们也可以对客户端进行踢除等操作。
用户认证配置
如果只是测试,那我们就可以不用设置用户权限,如果要是上线的项目我们就需要设置用户权限:
点击创建后,选择password-based,然后下一步
我们选用户管理后:
输入用户名与密码,我这里用户名为test1,密码为123,然后点保存:
我们再到MQTTX上更新我们的连接方式,填入用户名与密码:
这样我们就以用户名、帐号来连接了:
项目总结
在鲁班猫上创建mqtt服务器,是一个方便开发者在物联网上的非常友好的项目。这个mqtt服务器是一款免费的国产服务器,有友好的使用户界面。我已经使用了快5年了,非常稳定。而者如果开发要是把项目移植上ECS服务器上也非常快。
通过服务器的创建,大家就可以非常的方便调试自己的物联产品,因为如果你使用第三方产品,接入有限制,调试相比自己的服务器也没有这么方便。
怎么样,快来创建自己的MQTT服务器吧!有了这款服务器,让你在这次比赛,乃至以后的比赛会更加自信!加油,祝各位小伙伴天天有进步!