本專案來自程式汪背後的私活小團隊,開發了一個垃圾回收小程式裡面涉及物聯網,給粉絲分享一下解決方案,希望給想接私活的朋友一些經驗參考
影片版本 【我是程式汪】
    目錄
- 一、專案構成
- 二、開發人員
- 三、專案背景
- 四、小程式端
- 五、後端系統
- 最後 原始碼資料分享
專案構成
- 系統基本構成:原生微信小程式+ 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














 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			