本專案來自程式汪背後的私活小團隊,開發了一個垃圾回收小程式裡面涉及物聯網,給粉絲分享一下解決方案,希望給想接私活的朋友一些經驗參考
影片版本 【我是程式汪】
目錄
- 一、專案構成
- 二、開發人員
- 三、專案背景
- 四、小程式端
- 五、後端系統
- 最後 原始碼資料分享
專案構成
- 系統基本構成:原生微信小程式+ PC後臺+硬體
安裝命令
開發人員以及費用情況
- 開發週期60天
- 開發人數 2人
- 整體費用是10萬(不包含維護費)
- 走的公司合同
- 華為雲伺服器1臺
- 維護費用:專案總款的10% 一年
專案背景
這算一個公益類專案,鼓勵大家自覺垃圾分類的,其實大點的城市都已經垃圾分類了,為了進一步鼓勵居民垃圾分類,我們這個專案採用了積分獎勵制,有點類似行用卡積分,賺的積分可以購買商品的。
小程式端
這類回收的專案,程式汪也在github上找了一波,沒發現有合適開源的,於是就到某寶上花錢購買了一套回收的小程式系統+PC端後臺,(不要問我為什麼不從零開始開發這樣的逗比問題啊),接外包專案二開就是比較速度
硬體改造(難點)
這塊其實是硬體兄弟出的解決方案,去某寶花40元左右買的電子秤,然後自己開發的控制板跟電子秤對接,讀取它的具體資料,透過MQTT協議把資料同步到阿里雲IOT上,然後透過HTTP2.0把資料同步到Java後端服務
電子秤擺攤商用小型檯秤30kg公斤計價稱重賣菜精準廚房電子稱家用
資料流
程式汪提著1公斤西瓜皮->手機二維碼掃->繫結身份資訊->開啟垃圾桶蓋丟到對應垃圾桶內->電子秤返回重量->控制板->阿里雲IOT->後端服務->積分增加
訊息鏈路設計的知識
- MQTT 訊息傳輸協議
- 阿里雲IOT
- http2.0
MQTT訊息傳輸協議
MQ 遙測傳輸 (MQTT) 是輕量級基於代理的釋出/訂閱的訊息傳輸協議,設計思想是開放、簡單、輕量、易於實現。這些特點使它適用於受限環境。例如,但不僅限於此:
- 網路代價昂貴,頻寬低、不可靠。
- 在嵌入裝置中執行,處理器和記憶體資源有限。
採用springboot實現http2.0
1、java的配置tomcat實現http2.0。
2、http2.0升級協議新增到Tomcat的聯結器。您可以透過自定義嵌入式Tomcat容器來實現。
文章最下方有參考資料,大家可以具體看看用springboot怎麼實現http2.0
@Bean
public EmbeddedServletContainerCustomizer tomcatCustomizer() {
return (container) -> {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
((TomcatEmbeddedServletContainerFactory) container)
.addConnectorCustomizers((connector) -> {
connector.addUpgradeProtocol(new Http2Protocol());
});
}
};
}
下圖是測試機,電子秤已經被硬體小哥大卸八塊了
這是部分硬體負責通訊,太細節到原理程式汪也不會分析來
後端系統
PC端後臺主要是這些功能
DB的設計我分享一個訂單表出
支援以下語言種類:
-- ----------------------------
-- Table structure for ims_cjdc_order
-- ----------------------------
DROP TABLE IF EXISTS `ims_cjdc_order`;
CREATE TABLE `ims_cjdc_order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT '使用者id',
`order_num` varchar(20) NOT NULL COMMENT '訂單號',
`state` int(11) NOT NULL COMMENT '1.待付款2.待結單3.等待送達4.完成5.已評價6.取消7.拒絕8.退款中9.已退款10.退款拒絕',
`time` varchar(20) NOT NULL COMMENT '下單時間',
`pay_time` varchar(20) NOT NULL COMMENT '支付時間',
`jd_time` varchar(20) NOT NULL COMMENT '接單時間',
`cancel_time` varchar(20) NOT NULL COMMENT '取消時間',
`complete_time` varchar(20) NOT NULL COMMENT '完成時間',
`money` decimal(10,2) NOT NULL COMMENT '付款金額',
`box_money` decimal(10,2) NOT NULL COMMENT '餐盒費',
`ps_money` decimal(10,2) NOT NULL COMMENT '配送費',
`mj_money` decimal(10,2) NOT NULL COMMENT '滿減優惠',
`xyh_money` decimal(10,2) NOT NULL COMMENT '新使用者立減',
`tel` varchar(20) NOT NULL COMMENT '電話',
`name` varchar(20) NOT NULL COMMENT '姓名',
`address` varchar(200) NOT NULL COMMENT '地址',
`type` int(11) NOT NULL COMMENT '1.外賣2.店內3.預定4.當面付',
`store_id` int(11) NOT NULL COMMENT '商家id',
`note` varchar(50) NOT NULL COMMENT '備註',
`jj_note` varchar(50) NOT NULL COMMENT '拒絕理由',
`area` varchar(20) NOT NULL COMMENT '區域',
`lat` varchar(20) NOT NULL COMMENT '經度',
`lng` varchar(20) NOT NULL COMMENT '緯度',
`del` int(11) NOT NULL DEFAULT '2' COMMENT '1.刪除 2.未刪除',
`pay_type` int(11) NOT NULL COMMENT '1.微信支付2.餘額支付3.積分支付4.貨到付款',
`form_id` varchar(50) NOT NULL COMMENT '模板訊息form_id',
`form_id2` varchar(50) NOT NULL COMMENT '發貨formid',
`code` varchar(100) NOT NULL COMMENT '支付code',
`order_type` int(11) NOT NULL COMMENT '1.配送2.到店自取',
`delivery_time` varchar(20) NOT NULL COMMENT '送達時間',
`sex` int(11) NOT NULL,
`discount` decimal(10,2) NOT NULL,
`tableware` int(11) NOT NULL COMMENT '餐具',
`dd_info` text NOT NULL COMMENT '達達資訊',
`uniacid` int(11) NOT NULL,
`yhq_money` decimal(10,2) NOT NULL,
`coupon_id` int(11) NOT NULL,
`yhq_money2` decimal(10,2) NOT NULL,
`coupon_id2` int(11) NOT NULL,
`table_id` int(11) NOT NULL,
`dn_state` int(11) NOT NULL,
`dm_state` int(4) NOT NULL,
`yy_state` int(11) NOT NULL,
`deposit` decimal(10,2) NOT NULL,
`ship_id` varchar(30) NOT NULL,
`zk_money` decimal(10,2) NOT NULL,
`is_dd` int(11) NOT NULL DEFAULT '2',
`pt_info` text NOT NULL,
`kfw_info` text NOT NULL,
`hb_type` int(4) NOT NULL DEFAULT '1',
`original_money` decimal(10,2) NOT NULL,
`oid` int(11) NOT NULL,
`sss_peisong_id` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `store_id` (`store_id`),
KEY `state` (`state`),
KEY `order_type` (`order_type`),
KEY `uniacid` (`uniacid`),
KEY `user_id_2` (`user_id`),
KEY `store_id_2` (`store_id`),
KEY `state_2` (`state`),
KEY `order_type_2` (`order_type`),
KEY `uniacid_2` (`uniacid`),
KEY `user_id_3` (`user_id`),
KEY `store_id_3` (`store_id`),
KEY `state_3` (`state`),
KEY `order_type_3` (`order_type`),
KEY `uniacid_3` (`uniacid`),
KEY `user_id_4` (`user_id`),
KEY `store_id_4` (`store_id`),
KEY `state_4` (`state`),
KEY `order_type_4` (`order_type`),
KEY `uniacid_4` (`uniacid`),
KEY `user_id_5` (`user_id`),
KEY `store_id_5` (`store_id`),
KEY `state_5` (`state`),
KEY `order_type_5` (`order_type`),
KEY `uniacid_5` (`uniacid`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8;
如果想要更換程式碼主題,可在上方挑選,不支援程式碼主題自定義。
參考文件:
接入阿里雲IoT平臺
https://www.cnblogs.com/cache-yuan/p/10291511.html
MQTT入門https://www.runoob.com/w3cnote/mqtt-intro.html
mqtt案例程式碼
https://gitee.com/try-to/swoole_mqtt
http2.0
https://blog.csdn.net/qq_32447301/article/details/94299686
小程式原始碼和後端SQL分享給大家參考學習下
連結: https://pan.baidu.com/s/1SrHO-FyPnKHvaxFp4a_4uA
密碼: ih5t