野火科技
直播中

华仔stm32

3年用户 2869经验值
擅长:嵌入式技术
私信 关注
[经验]

【鲁班猫创意氛围赛】项目提交: 一招拥有自己的物联网MQTT服务器

前言

从事物联网开发的小伙伴们,要mqtt发布与订阅消息,需要去配置复杂的协议,来连接如阿里云、onenet等服务器。

这里我向大家展示一下用鲁班猫建立自己的mqtt服务器,大家就可以拥有自己的MQTT服务器,以后实验物联网,或者家居综合控制,用这个一台鲁班猫就可以轻松解决了,而且节能环保!

项目材料

  • 鲁班猫卡片电脑
  • 64G TF卡
  • EMQX开源软件
  • 鲁班猫ubuntu22.0固件
  • 无线键盘鼠标、显示器等

配置运行环境

  1. 下载鲁班猫固件以及烧写工具
    百度云链接:https://pan.baidu.com/s/19t8AZV9SYTdjn2uObBiSGA

提取码:hslu

  1. 烧写固件到SD卡上
    烧写工具在开发软件目录下面的SDDiskTool_v1.7。解压后打开如下图:
    image.png
    固件在文件夹3-Linux镜像\Ubuntu系统镜像\通用镜像(extboot)-适用于所有板卡下面,我这里选择桌面版。
    image.png
    选择好升级固件:
    image.png
    选择SD启动后,点击开始创建
    image.png
    然后耐心等待写入完毕。

  2. 把SD卡插到鲁班猫SD卡接口,上电。用TypeC转USBA接上无线键盘鼠标。用HDMI线接好显示器。

    image.png

  3. 开机到出现登录窗口,默认用户名是cat,密码是temppwd:

    image.png

  4. 进入桌面后,先配置wifi,按下图标注连接自己的路由器:

    image.png

    输入路由器密码,点connect

    image.png

    稍等一会就会显示已连。

  5. 查看自己的IP地址,打开终端,输入ifconfig:

    image.png

    到此环境配置就告一段落。

    安装emqx

  6. 执行sudo apt update。

  7. 配置 EMQX Apt 源

cat@lubancat:~$ curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
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://packages.emqx.com/emqx/emqx/ubuntu jammy/main arm64 emqx arm64 5.0.22 [38.9 MB]
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,就进入控制台界面:

image.png

初始用户名为admin,密码为public

1681734026125.png

第一次进入,要求重置密码,输入两次:

1681734105265.png

这样我们就进入控制台了:

image.png

设置中文:
image.png
点击language选择简体中文

image.png

然后点击applay使应用生效:
image.png
界面就变成中文的了:
image.png

测试

1、管理页面测试
从左侧菜单进行WebSocket客户端:
image.png

如下图,我们选择mqtt3.1.1,连接到服务器,然后订阅他默认的主题,然后发送一个数据,在下面的监控,我们就看到收发到的数据了,说明服务器搭建成功:
image.png

2、从另一台电脑测试
我们打开一个MQTTx,按下图填好参数,并连接

image.png
新建一个订阅主题:
image.png

新建一个发布主题,填入容后点发布,这样就把数据发送出云了,同时也接收了服务器发出的测试:
image.png

同时在服务器监控页面,也收到了发布的数据:
image.png

在连接的菜单中,我们点击刷新,就可以看到目前的活连:
image.png
在这里我们也可以对客户端进行踢除等操作。

image.png

用户认证配置

如果只是测试,那我们就可以不用设置用户权限,如果要是上线的项目我们就需要设置用户权限:
image.png

点击创建后,选择password-based,然后下一步

image.png
image.png
image.png

image.png
我们选用户管理后:
输入用户名与密码,我这里用户名为test1,密码为123,然后点保存:
image.png

我们再到MQTTX上更新我们的连接方式,填入用户名与密码:
image.png
这样我们就以用户名、帐号来连接了:
image.png

项目总结

在鲁班猫上创建mqtt服务器,是一个方便开发者在物联网上的非常友好的项目。这个mqtt服务器是一款免费的国产服务器,有友好的使用户界面。我已经使用了快5年了,非常稳定。而者如果开发要是把项目移植上ECS服务器上也非常快。
通过服务器的创建,大家就可以非常的方便调试自己的物联产品,因为如果你使用第三方产品,接入有限制,调试相比自己的服务器也没有这么方便。
怎么样,快来创建自己的MQTT服务器吧!有了这款服务器,让你在这次比赛,乃至以后的比赛会更加自信!加油,祝各位小伙伴天天有进步!

更多回帖

发帖
×
20
完善资料,
赚取积分