【微信小程式控制硬體①】 全網首發,藉助 emq 訊息伺服器帶你如何搭建微信小程式的mqtt伺服器,輕鬆控制智慧硬體!
一、前言;
-
從去年開始自學前端,到今年的伺服器的學習,也算是自己的一大進步了!這幾天開始搭建小程式的伺服器,琢磨了三天的
Nginx
中間訊息外掛,期間也是不睡午覺!也許入門Nginx
,和大家一樣期間踩了很多坑!微信小程式也僅僅只有websocket
協議的說明,但是已經不維護了! -
希望你可以靜心看看本篇文章,可以幫助你跳過搭建微信小程式的mqtt伺服器的坑,不管你是用
emq
作為伺服器,還是其他的伺服器程式程式碼! -
本文搭建好了之後,就可以在微信小程式上實現控制智慧硬體,即為連線
mqtt
伺服器。像現在最為流行的esp8266
,esp32
!廢話不多說,Let us go !
二、準備材料;
-
【必要具備】一個備案成功的域名 + 配置的
SSL
證書! 證書可以是免費的,或者您是老闆可以買個收費的! -
【必要具備】一個伺服器,可以是騰訊伺服器,或者是阿里雲伺服器,而本文用的是阿里雲伺服器!因為雙十一剛剛搞活動,一百多塊買了一年伺服器!呵呵!
-
【必要具備】關於微信小程式的原始碼,下篇就會開源免費贈送給大家!!
-
【其他】
SecureCRT
遠端命令連線工具!當然還有微信小程式開發工具,這些自己去下載吧!
三、實現的過程和原理;
- 總所周知,小程式的架構是用基本前端程式碼實現的,就是
wxml+wcss+js+json
js
上面實現Mqtt
協議通訊,那麼就離不開webSocket
,微信對於webSocket
的連線定義,我總結了一下:
① 連線的埠號必須是
443
,也就是https
的訪問埠; ② 連線時候,不能攜帶埠號,就是不能在URL
中註明443
埠!比如正確的寫法是wss://www.xuhong.com
,而不能是wss://www.xuhong.com:443
!!切記!
- 關於
Nginx
的知識,我也是剛剛入門,如果大家想深入學,可以去慕課網有一門實戰專門講解Nginx
這個強大的訊息中介軟體!下面列下常見的命令和知識!- 原始碼安裝Nginx的 配置檔案預設在
/usr/local/nginx/conf
裡面的nginx.conf
./nginx - t
: 表示檢測nginx.conf
檔案的語法是否有問題!./nginx - s reload
: 表示重新載入nginx.conf
檔案!./nginx - s quit
: 表示強制或正常退出 Nginx 服務!./nginx
: 表示開啟 Nginx 服務!
- 原始碼安裝Nginx的 配置檔案預設在
四、伺服器配置;
- 下面是伺服器配置的詳細步驟,千萬不要眨眼!!注意每個標題是個命令!
4.1
yum update
- 更新我們的
yum
源!
4.2
yum -y install gcc automake autoconf libtool make
- 安裝
make
工具 ,成功如下;
4.3
yum install gcc gcc-c++
- 安裝g++ ,成功如下;
4.4
yum install pcre pcre-devel
- 安裝pcre正則表示式,因為nginx的rewrite模組和http核心模組都是使用它 ,成功如下;
4.5
wget http://nginx.org/download/nginx-1.9.9.tar.gz
- 獲取
nginx
,成功如下;
4.6
tar -vzxf nginx-1.9.9.tar.gz
- 解壓
nginx
;
4.7
cd nginx-1.9.9.tar.gz && ./configure
- 先使配置檔案
nginx
生效;
4.8
yum install zlib zlib-devel
zlib
提供壓縮演算法,nginx
很多地方都會用到;
4.9
yum install openssl openssl-devel
- 用到安全頁面,所以需要
OpenSSL
庫;
4.10
wget https://codeload.github.com/openresty/headers-more-nginx-module/tar.gz/v0.33
- 據說這個可以適配某些JS的
webSocket
協議頭的庫,這裡也下載吧;本博文不會用到,但是大家可能會用到!
4.11
./configure --prefix=/usr/local/nginx --add-module=/root/nginx-1.9.9/headers-more-nginx-module-0.33 --with-http_stub_status_module --with-http_ssl_module
- 新增模組
openSSL
和headers-more-nginx-module-0.33
;
4.12
make && make install
- 開始編譯
nginx
程式碼;
4.13
cd /usr/local/nginx/sbin && ./nginx -V
- 編譯
nginx
程式碼後會有/usr/local/nginx
目錄,我們檢視當前編譯後有哪些模組生效了;看到下面有2個模組執行成功了!
4.14
wget https://www.emqx.io/static/brokers/emqttd-centos7-v2.3.11.zip --no-check-certificate
- 無校驗方式獲取
emq
壓縮包,如果不加--no-check-certificate
可能是失敗!
4.15
yum install unzip -y
- 新增
zip
的解壓工具,用來解壓emq
的壓縮包!
4.16
unzip emqttd-centos7-v2.3.11.zip
- 解壓壓縮包
emq
!
4.17
cd /root/emq/emqttd/bin && ./emqttd console
- 執行伺服器
emq
!
4.18
cd /root/emq/emqttd/bin && ./emqttd start
- 守護程序開始
emq
!
4.19
cd /usr/local/nginx/conf && vim nginx.conf
- 修改
nginx
的配置檔案!根據你的實際情況來定,新增如下程式碼! - 其中
www.domain.com
是您的備案後域名,ssl_certificate
和ssl_certificate_key
對應的檔案位置根據你的實際而定,注意這個是你配置域名的證書的資訊!這個向證書生產方索取!!!
server {
listen 443;
server_name www.domain.com;
ssl on;
ssl_certificate /root/myCert/cert/cert.crt;
ssl_certificate_key /root/myCert/cert/cert.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
location = /mqtt {
# 8083就是我們的emq的websocket的埠號
proxy_pass http://www.domain.com:8083;
proxy_redirect off;
proxy_set_header Host www.domain.com:8083;
proxy_set_header Sec-WebSocket-Protocol mqtt;
# 這個是與你的 js客戶端的庫有關係,本博文的不需要,為了兼顧以後小夥伴,我這裡註釋了下!
#more_clear_headers Sec-WebSocket-Protocol;
# 這些都是 websocket必須要配置的
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
4.20
cd /usr/local/nginx/sbin&& ./nginx -t
- 檢視配置檔案語法有問題?
4.20
cd /usr/local/nginx/sbin&& ./nginx -s reload
- 重新載入配置檔案!
三、小程式端連線效果;
- 下篇將介紹怎麼配置小程式端的程式碼!歡迎收藏本頁面哦!
- 很多人怎麼聯絡我一起學習進步,下面打個小小公告和乾貨無償分享: