精简版智能植物生长机,快速打造绿植守护神

您所在的位置:网站首页 植物生长机器 精简版智能植物生长机,快速打造绿植守护神

精简版智能植物生长机,快速打造绿植守护神

2024-06-30 18:01:18| 来源: 网络整理| 查看: 265

第一步:设计功能板

我们选取 涂鸦三明治 Wi-Fi SoC 主控板(WB3S) 作为主控。由此,我们需要设计一块智能植物生长机功能板,它可以实现以下功能:

DC 12V 供电 5V 水泵控制 读取土壤湿度模拟量 4 路 PWM 灯板控制

相关设计思路如下:

原理图(点击下载原理图 PDF 文件)

image.png

PCB 设计(点击下载 PCB PDF 文件)

PCB 制板(点此下载 Gerber ZIP 文件)

image.png

绘制坐标文件(点击下载 CSV 文件)

标志 封装 Mid X Mid Y Ref X Ref Y Pad X Pad Y 图层 旋转(°) 说明 L1 IND-SMD_L5.0-W5.0-P3.60_SMNR5040 9.02mm -15.24mm 9.02mm -15.24mm 9.02mm -17.04mm T 90 68uH U2 R0603 30.35mm -19.94mm 30.35mm -19.94mm 31.11mm -19.94mm T 180 0603L100SLYR R2 R0603 45.21mm -18.41mm 45.21mm -18.41mm 44.46mm -18.41mm T 0 1K D2 SMB_L4.6-W3.6-LS5.3-BI 24.26mm -5.33mm 24.26mm -5.33mm 24.26mm -2.74mm T 270 SMBJ12CA_C699031 U5 HDR-TH_8P-P2.54-V 16.33mm -75.56mm 16.33mm -75.56mm 16.33mm -66.67mm T 270 MTP125-1108S1 U6 HDR-TH_8P-P2.54-V 64.59mm -57.78mm 64.59mm -57.78mm 64.59mm -48.89mm T 270 MTP125-1108S1 C1 CAP-SMD_BD10.0-L10.3-W10.3-FD 32.77mm -6.98mm 32.77mm -6.98mm 32.77mm -2.79mm T 90 470uF U3 SOT-223_L6.5-W3.5-P2.30-LS7.0-BR 38.23mm -17.65mm 38.23mm -17.65mm 35.37mm -15.35mm T 180 ASPL1117-3.3-DT-R/SOT223 CN2 CONN-TH_XH-3AW 61.98mm -33.53mm 61.98mm -33.53mm 61.98mm -31.03mm T 270 XH-3AW F1 F1206 18.8mm -2.79mm 18.8mm -2.79mm 17.5mm -2.79mm T 0 JK-NSMD300L-12V U4 HDR-TH_10P-P2.54-V 16.38mm -51.18mm 16.38mm -51.18mm 16.38mm -39.75mm T 270 MTP125-1110S1 U1 SOIC-8_L5.0-W4.0-P1.27-LS6.0-BL 24.51mm -17.78mm 24.51mm -17.78mm 21.81mm -15.87mm T 270 XL1509-5.0E1 Q1 SOT-23_L2.9-W1.3-P0.95-LS2.4-BR 48.77mm -17.14mm 48.77mm -17.14mm 47.82mm -18.34mm T 270 NCE3401AY DC1 DC-IN-TH_DC005 10.8mm -95.89mm 10.8mm -95.88mm 13.89mm -93.53mm T 0 dc-005 5.5-2.0 CN1 CONN-TH_2P-P2.50_XH-2AW 50mm -7.75mm 50mm -7.75mm 48.75mm -7.75mm T 0 XH-2AW D1 SMA_L4.4-W2.8-LS5.4-RD 17.65mm -12.83mm 17.65mm -12.83mm 17.65mm -15.39mm T 90 SS34_C83961 C2 C0603 40.01mm -3.43mm 40.01mm -3.43mm 40.01mm -4.13mm T 90 1uF U7 HDR-TH_6P-P2.54-V 64.59mm -78.1mm 64.59mm -78.1mm 64.59mm -71.75mm T 270 MTP125-1106S1 C4 C0603 30.35mm -18.03mm 30.35mm -18.03mm 29.65mm -18.03mm T 0 10uF C5 C0603 30.35mm -16.13mm 30.35mm -16.13mm 29.65mm -16.13mm T 0 10uF C3 CAP-SMD_BD8.0-L8.3-W8.3-RD 8.89mm -24.26mm 8.89mm -24.26mm 8.89mm -20.96mm T 270 47uF CN3 CONN-TH_XH-6AW 61.98mm -17.02mm 61.98mm -17.02mm 61.98mm -10.77mm T 90 XH-6AW R1 R0603 48.64mm -20.83mm 48.64mm -20.83mm 49.39mm -20.83mm T 180 100K

BOM清单(点击下载 CSV 文件)

ID 名称 代号 封装 数量 1 470uF C1 CAP-SMD_BD10.0-L10.3-W10.3-FD 1 2 1uF C2 C0603 1 3 47uF C3 CAP-SMD_BD8.0-L8.3-W8.3-RD 1 4 10uF C4,C5 C0603 2 5 XH-2AW CN1 CONN-TH_2P-P2.50_XH-2AW 1 6 XH-3AW CN2 CONN-TH_XH-3AW 1 7 XH-6AW CN3 CONN-TH_XH-6AW 1 8 SS34_C83961 D1 SMA_L4.4-W2.8-LS5.4-RD 1 9 SMBJ12CA_C699031 D2 SMB_L4.6-W3.6-LS5.3-BI 1 10 dc-005 5.5-2.0 DC1 DC-IN-TH_DC005 1 11 JK-NSMD300L-12V F1 F1206 1 12 68uH L1 IND-SMD_L5.0-W5.0-P3.60_SMNR5040 1 13 NCE3401AY Q1 SOT-23_L2.9-W1.3-P0.95-LS2.4-BR 1 14 100K R1 R0603 1 15 1K R2 R0603 1 16 XL1509-5.0E1 U1 SOIC-8_L5.0-W4.0-P1.27-LS6.0-BL 1 17 0603L100SLYR U2 R0603 1 18 ASPL1117-3.3-DT-R/SOT223 U3 SOT-223_L6.5-W3.5-P2.30-LS7.0-BR 1 19 MTP125-1110S1 U4 HDR-TH_10P-P2.54-V 1 20 MTP125-1108S1 U5,U6 HDR-TH_8P-P2.54-V 2 21 MTP125-1106S1 U7 HDR-TH_6P-P2.54-V 1 第二步:设计 4 路 PWM 灯板 一:光谱成分对植物的影响 波长辐射范围 影响 大于 1.00μm 被植物吸收转化为热能,影响植物体温和蒸腾情况,可促进干物质的积累,但不参与光合作用。 720-800nm 的远红外光 对光周期及种子的形成有重要作用,并控制开花与果实的颜色。 720-1000nm 对植物伸长起作用。 610-720nm 的红光、橙光 可被叶绿素强烈吸收,某种情况下表现为强的光周期作用。 510-610nm 的光,主要为绿光 表现为的光合作用与弱成形作用。 400-510m 的光,主要为蓝紫光 被叶绿素和黑色素强烈吸收,表现为强的光合作用与成形作用。 320-400nm 的光,主要为紫外光 紫外辐射起成形和着色作用,如使植物变矮,颜色变深,叶片变厚等。 280-320nm 的紫外线 对大多数植物有害。 小于280nm 的远紫外辐射 可立即杀死植物。 二:灯珠选择

根据光谱成分对植物生长的影响,我们选用以下五种灯珠作为灯板的发光部件:

2835 暖白LED(点此下载 PDF 文件)

2835 660nm红色LED(点此下载 Word 文件)

2835 蓝色LED(点击下载 PDF 文件)

2835 绿色LED(点击下载 PDF 文件)

2835 850nm红外LED (点击下载 PDF 文件)

说明:绿色主要用作氛围灯,对植物生长相对于其他颜色的灯珠意义不大。您可以根据自己的效果偏好自行更换灯珠,需要注意的是您更换后的灯珠需要跟电路相匹配,特别注意红光和红外电路部分,您可以参考灯板原理图和 MT7201C 相关文档。

接线原理图(点此下载 PDF 文件)

image.png

PCB 设计(点击下载PDF文件)

PCB 制板(点此下载 Gerber ZIP 文件)

image.png

PCB 坐标文件(点击下载 CSV 文件)

代号 封装 Mid X Mid Y Ref X Ref Y Pad X Pad Y 图层 旋转(°) 说明 R1 R0603 -910mil 315mil -910mil 315mil -910mil 285.34mil B -90 0.5 R2 R0603 -910mil 115mil -910mil 115mil -910mil 85.34mil B -90 0.8 R3 R0603 -900mil -75mil -900mil -75mil -900mil -104.66mil B -90 0.8 R4 R0603 -900mil -280mil -900mil -280mil -900mil -309.66mil B -90 0.8 C1 C0603 -840mil 315mil -840mil 315mil -840mil 287.44mil B -90 4.7uF C2 C0603 -830mil 115mil -830mil 115mil -830mil 87.44mil B -90 4.7uF C3 C0603 -830mil -70mil -830mil -70mil -830mil -97.56mil B -90 4.7uF C4 C0603 -830mil -280mil -830mil -280mil -830mil -307.56mil B -90 4.7uF U1 SOT-89-5_L4.5-W2.5-P1.50-LS4.5-BR -1121.1mil 314.96mil -1121.1mil 314.96mil -1187.93mil 374.01mil B 0 MT7201C U2 SOT-89-5_L4.5-W2.5-P1.50-LS4.5-BR -1121.1mil 118.11mil -1121.1mil 118.11mil -1187.93mil 177.16mil B 0 MT7201C U3 SOT-89-5_L4.5-W2.5-P1.50-LS4.5-BR -1120mil -75.01mil -1120mil -75mil -1186.83mil -15.95mil B 0 MT7201C U4 SOT-89-5_L4.5-W2.5-P1.50-LS4.5-BR -1121.1mil -275.6mil -1121.1mil -275.59mil -1187.93mil -216.54mil B 0 MT7201C C5 C0603 -1355mil 340mil -1355mil 340mil -1355mil 312.44mil B -90 4.7uF C6 C0603 -1355mil 145mil -1355mil 145mil -1355mil 117.44mil B -90 4.7uF C7 C0603 -1355mil -45mil -1355mil -45mil -1355mil -72.56mil B -90 4.7uF C8 C0603 -1355mil -250mil -1355mil -250mil -1355mil -277.56mil B -90 4.7uF LED31 LED-SMD_L3.5-W2.8-RD_TJ-S2835UG5W8TLC2R-A5 175mil -375mil 175mil -375mil 219.78mil -375mil T 0 2835 850nm红外LED LED1 LED-SMD_L3.3-W2.8-RD 1479.83mil 538.61mil 1479.83mil 538.61mil 1437.01mil 538.61mil T 0 2835 暖白LED LED2 LED-SMD_L3.3-W2.8-RD 787.39mil 1363.82mil 787.4mil 1363.82mil 744.58mil 1363.82mil T 0 2835 暖白LED LED3 LED-SMD_L3.3-W2.8-RD -273.47mil 1550.88mil -273.46mil 1550.88mil -316.28mil 1550.88mil T 0 2835 暖白LED LED4 LED-SMD_L3.3-W2.8-RD -1206.37mil 1012.26mil -1206.37mil 1012.26mil -1249.19mil 1012.26mil T 0 2835 暖白LED LED5 LED-SMD_L3.3-W2.8-RD -1574.81mil 0mil -1574.8mil 0mil -1617.62mil 0mil T 0 2835 暖白LED LED6 LED-SMD_L3.3-W2.8-RD -1206.37mil -1012.26mil -1206.37mil -1012.26mil -1249.19mil -1012.26mil T 0 2835 暖白LED LED7 LED-SMD_L3.3-W2.8-RD -273.45mil -1550.88mil -273.46mil -1550.88mil -230.64mil -1550.88mil T 180 2835 暖白LED LED8 LED-SMD_L3.3-W2.8-RD 787.4mil -1363.82mil 787.4mil -1363.82mil 830.22mil -1363.82mil T 180 2835 暖白LED LED9 LED-SMD_L3.3-W2.8-RD 1479.83mil -538.61mil 1479.83mil -538.61mil 1437.01mil -538.61mil T 0 2835 暖白LED D1 SMB_L4.6-W3.6-LS5.3-L-FD 1455mil 310mil 1455mil 310mil 1368mil 310mil T 0 SMBJ12A_C294866 D2 SMB_L4.6-W3.6-LS5.3-L-FD 1455mil 110mil 1455mil 110mil 1368mil 110mil T 0 SMBJ12A_C294866 D3 SMB_L4.6-W3.6-LS5.3-L-FD 1455mil -85mil 1455mil -85mil 1368mil -85mil T 0 SMBJ12A_C294866 D4 SMB_L4.6-W3.6-LS5.3-L-FD 1455mil -285mil 1455mil -285mil 1368mil -285mil T 0 SMBJ12A_C294866 LED16 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 755mil 330mil 755mil 330mil 710.22mil 330mil T 180 2835 绿色LED LED17 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 -100mil 835mil -100mil 835mil -144.78mil 835mil T 180 2835 绿色 LED LED18 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 -760mil 335mil -760mil 335mil -715.22mil 335mil T 0 2835 绿色 LED LED19 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 -755mil -645mil -755mil -645mil -710.22mil -645mil T 0 2835 绿色LED LED20 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 100mil -1140mil 100mil -1140mil 55.22mil -1140mil T 180 2835 绿色LED LED21 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 955mil -650mil 955mil -650mil 999.78mil -650mil T 0 2835 绿色LED LED10 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 950mil 330mil 950mil 330mil 994.78mil 330mil T 0 2835 蓝色LED LED11 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 95mil 835mil 95mil 835mil 139.78mil 835mil T 0 2835 蓝色LED LED12 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 -955mil 335mil -955mil 335mil -999.78mil 335mil T 180 2835 蓝色LED LED13 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 -955mil -645mil -955mil -645mil -999.78mil -645mil T 180 2835 蓝色LED LED14 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 -90mil -1140mil -90mil -1140mil -134.78mil -1140mil T 180 2835 蓝色LED LED15 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 755mil -650mil 755mil -650mil 710.22mil -650mil T 180 2835 蓝色LED LED22 LED-SMD_L3.5-W2.8-RD_TJ-S2835UG5W8TLC2R-A5 852.39mil 492.12mil 852.39mil 492.13mil 852.39mil 536.91mil T 90 2835 660nm红色LED LED23 LED-SMD_L3.5-W2.8-RD_TJ-S2835UG5W8TLC2R-A5 0mil 984.26mil 0mil 984.25mil 0mil 1029.04mil T 90 2835 660nm红色LED LED24 LED-SMD_L3.5-W2.8-RD_TJ-S2835UG5W8TLC2R-A5 -852.39mil 492.12mil -852.39mil 492.13mil -852.39mil 536.91mil T 90 2835 660nm红色LED LED25 LED-SMD_L3.5-W2.8-RD_TJ-S2835UG5W8TLC2R-A5 -852.39mil -492.12mil -852.39mil -492.13mil -852.39mil -447.34mil T 90 2835 660nm红色LED LED26 LED-SMD_L3.5-W2.8-RD_TJ-S2835UG5W8TLC2R-A5 0mil -984.26mil 0mil -984.25mil 0mil -939.47mil T 90 2835 660nm红色LED LED27 LED-SMD_L3.5-W2.8-RD_TJ-S2835UG5W8TLC2R-A5 852.39mil -492.12mil 852.39mil -492.13mil 852.39mil -447.34mil T 90 2835 660nm红色LED LED29 LED-SMD_L3.5-W2.8-RD_TJ-S2835UG5W8TLC2R-A5 170mil 360mil 170mil 360mil 214.78mil 360mil T 0 2835 850nm红外LED LED30 LED-SMD_L3.5-W2.8-RD_TJ-S2835UG5W8TLC2R-A5 -393.7mil 0mil -393.7mil 0mil -438.48mil 0mil T 180 2835 850nm红外LED CN3 CONN-TH_XH-6AW 1653.54mil 0mil 1653.54mil 0mil 1653.54mil 246.1mil T 90 XH-6AW L1 IND-SMD_L3.5-W3.0_GSDR32P 1200mil 305mil 1200mil 305mil 1148.82mil 305mil T 0 47uH L2 IND-SMD_L3.5-W3.0_GSDR32P 1200mil 108.15mil 1200mil 108.15mil 1148.82mil 108.15mil T 0 47uH L3 IND-SMD_L3.5-W3.0_GSDR32P 1200mil -88.7mil 1200mil -88.7mil 1148.82mil -88.7mil T 0 47uH L4 IND-SMD_L3.5-W3.0_GSDR32P 1200mil -285.55mil 1200mil -285.55mil 1148.82mil -285.55mil T 0 47uH

BOM 清单(点此下载 CSV 文件)

ID 名称 代号 封装 数量 1 4.7uF C1,C2,C3,C4 C0603 4 2 4.7uF C5,C6,C7,C8 C0603 4 3 XH-6AW CN3 CONN-TH_XH-6AW 1 4 SMBJ12A_C294866 D1,D2,D3,D4 SMB_L4.6-W3.6-LS5.3-L-FD 4 5 47uH L1,L2,L3,L4 IND-SMD_L3.5-W3.0_GSDR32P 4 6 2835 暖白LED LED1,LED2,LED3,LED4,LED5,LED6,LED7,LED8,LED9 LED-SMD_L3.3-W2.8-RD 9 7 2835 蓝色LED LED10,LED11,LED12,LED13,LED14,LED15 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 6 8 2835 绿色LED LED16,LED17,LED18,LED19,LED20,LED21 LED-SMD_L3.5-W2.8-R-RD_TJ-S2835UG5W8TLC6B-A5 6 9 2835 660nm红色LED LED22,LED23,LED24,LED25,LED26,LED27 LED-SMD_L3.5-W2.8-RD_TJ-S2835UG5W8TLC2R-A5 6 10 2835 850nm红外LED LED29,LED30,LED31 LED-SMD_L3.5-W2.8-RD_TJ-S2835UG5W8TLC2R-A5 3 11 0.5 R1 R0603 1 12 0.8 R2,R3,R4 R0603 3 13 M3铜柱 TP1,TP2,TP3,TP4 M3铜柱 4 14 MT7201C U1,U2,U3,U4 SOT-89-5_L4.5-W2.5-P1.50-LS4.5-BR 4 第三步:结构设计 一:C 型灯架设计

点此下载 DWG 2D 图纸

使用8mm亚克力切割和热弯制成,用于固定灯板和水箱。

二:水箱 3D 打印

用于盛水或者水杯,另外在其内部放置主控板和功能板。整体采用 PLA 材质,通过 3D 打印制作而成。

水箱盖(点此下载 STL 文件)

整体盖(点此下载 STL 文件)

整体部分(点此下载 STL 文件)

三:装配效果 第四步:根据清单收集物料

相关物料,请参考上文物料章节。

第五步:在 IoT 产品创建产品

完成整机搭建后,还需要在 IoT 平台上创建智能产品,创建产品后您才能获得相关嵌入式开发包,进行智能设备的 TuyaOS 开发。该产品代表了智能设备在 IoT 平台上的功能映射、包含了相关授权信息、产品配置等,方便植物生长机与 IoT 平台的通信。本小节步骤介绍了您在平台上创建植物生长机的主要步骤,详细步骤请参考 选品类创建产品。

进入 涂鸦 IoT 平台,点击创建产品。选择 小家电 > 宠物 > 植物生长机。

选择自定义方案,输入产品名称,选择通讯协议为WIFI+蓝牙,点击创建产品。

image.png

在 功能定义 阶段,添加标准功能,选择 开关、水泵开关、倒计时、倒计时剩余时间、故障告警。

功能点名称、枚举值等,您可自行编辑修改。

image.png

在自定义功能区域,点击添加功能按钮,编辑功能点名称、标识名,勾选数据类型和数据传输类型即可完成功能点创建。

要实现所有的设备功能,还需要根据功能需求自行创建额外的 DP 功能点。

添加 红灯设置、绿灯设置、蓝灯设置、暖灯设置 4 个 DP 点,用于设置四路 LED 灯的亮度,实现 RGBW 调光的功能。

添加 灯光开关,布尔型 DP,用于控制灯的开关。

添加 土壤湿度等级,枚举型 DP,用于设置水泵自动浇水的阈值等级。

image.png

设定完功能点后,下一步点击设备面板,选择 App 的面板样式。推荐选择开发调试面板,比较直观,且可以开到 DP 数据包的接收和发送,方便开发阶段调试使用。

至此,产品的创建基本完成,可以正式开始嵌入式软件部分的开发。

第六步:嵌入式开发

本 Demo 方案的嵌入式代码基于 BK7231 平台,使用涂鸦通用 Wi-Fi SDK 进行 SoC 低代码开发,具体代码可下载查看 Demo 例程。点此下载本 Demo 完整例程。

一:应用层入口

打开 Demo 例程,其中的apps文件夹内就是 Demo 的应用代码。应用代码结构如下:

├── src | ├── plant_driver | | └── plant_pwm.c // 驱动灯板,调用 SoC 层的 PWM 接口进行再封装 | ├── plant_soc // 涂鸦 SDK SoC 层接口相关文件 | ├── tuya_device.c // 应用层入口文件 | ├── app_plant.c // 植物生长机主要应用层 | └── plant_control.c // 植物生长机各个功能组件的控制逻辑相关 | ├── include // 头文件目录 | ├── plant_driver | | └── plant_pwm.h | ├── plant_soc | ├── tuya_device.h | ├── app_plant.h | └── plant_control.h | └── output // 编译产物

打开 tuya_device.c 文件,找到 device_init 函数:

OPERATE_RET device_init(VOID) { OPERATE_RET op_ret = OPRT_OK; UCHAR_T connect_mode = 0; PR_NOTICE("goto device_init!!!"); TY_IOT_CBS_S wf_cbs = { status_changed_cb,\ gw_ug_inform_cb,\ gw_reset_cb,\ dev_obj_dp_cb,\ dev_raw_dp_cb,\ dev_dp_query_cb,\ NULL, }; connect_mode = GWCM_OLD; op_ret = tuya_iot_wf_soc_dev_init_param(connect_mode,WF_START_SMART_FIRST,&wf_cbs,NULL,PRODECT_KEY,DEV_SW_VERSION); if(OPRT_OK != op_ret) { PR_ERR("tuya_iot_wf_soc_dev_init_param error,err_num:%d",op_ret); return op_ret; } op_ret = tuya_iot_reg_get_wf_nw_stat_cb(wf_nw_status_cb); if(OPRT_OK != op_ret) { PR_ERR("tuya_iot_reg_get_wf_nw_stat_cb is error,err_num:%d",op_ret); return op_ret; } op_ret = app_plant_init(APP_PLANT_NORMAL); if(OPRT_OK != op_ret) { PR_ERR("plant init err!"); return op_ret; } return op_ret; }

在 BK7231T 平台的 SDK 环境中,device_init 函数为重要的应用代码入口。设备上电后平台适配层运行完一系列初始化代码后就会调用该函数来进行应用层的初始化操作。该函数主要做三件事:

调用 tuya_iot_wf_soc_dev_init_param()接口进行SDK初始化,配置了工作模式、配网模式,同时注册了各种回调函数并存入了PID(代码中宏定义为PRODECT_KEY)。

TY_IOT_CBS_S wf_cbs = { status_changed_cb,\ gw_ug_inform_cb,\ gw_reset_cb,\ dev_obj_dp_cb,\ dev_raw_dp_cb,\ dev_dp_query_cb,\ NULL, }; connect_mode = GWCM_OLD; op_ret = tuya_iot_wf_soc_dev_init_param(connect_mode,WF_START_SMART_FIRST,\ &wf_cbs,NULL,PRODECT_KEY,DEV_SW_VERSION); if(OPRT_OK != op_ret) { PR_ERR("tuya_iot_wf_soc_dev_init_param error,err_num:%d",op_ret); return op_ret; }

调用 tuya_iot_reg_get_wf_nw_stat_cb()接口注册设备网络状态回调函数。

op_ret = tuya_iot_reg_get_wf_nw_stat_cb(wf_nw_status_cb); if(OPRT_OK != op_ret) { PR_ERR("tuya_iot_reg_get_wf_nw_stat_cb is error,err_num:%d",op_ret); return op_ret; }

调用应用层初始化函数。

op_ret = app_plant_init(APP_PLANT_NORMAL); if(OPRT_OK != op_ret) { PR_ERR("plant init err!"); return op_ret; } 二:应用结构

本 Demo 应用代码主要分三层来实现:

最底层为 PWM 和各个传感器的驱动代码,封装出传感器的初始化、采集等接口,但由于本 Demo 为植物生长机的小型版本,只使用了 ADC 采集型的土壤湿度传感器,故此层只涉及到 PWM 相关接口的调用。 第二层为控制逻辑部分的代码,调用驱动层的传感器接口,实现各个组件的控制逻辑,封装出数据处理轮询接口; 第一层为主要应用层,创建应用任务调用第二层的接口,同时处理 DP 数据的上报和接收解析。

第一层是在app_plant.c文件中实现的,大致内容如下:

app_plant_init() 调用第二层封装出的设备初始化接口,创建应用任务;

OPERATE_RET app_plant_init(IN APP_PLANT_MODE mode) { OPERATE_RET op_ret = OPRT_OK; if(APP_PLANT_NORMAL == mode) { // IO、传感器、pwm等初始化 plant_device_init(); // 创建ADC类传感器数据采集任务 tuya_hal_thread_create(NULL, "thread_data_get_adc", 512*4, TRD_PRIO_4, sensor_data_get_adc_theard, NULL); // 创建数据处理任务 tuya_hal_thread_create(NULL, "thread_data_deal", 512*4, TRD_PRIO_4, sensor_data_deal_theard, NULL); // 创建 DP 数据定时循环上报任务 tuya_hal_thread_create(NULL, "thread_data_report", 512*4, TRD_PRIO_4, sensor_data_report_theard, NULL); }else { // 非产测模式 } return op_ret; }

app_report_all_dp_status()上报所有DP数据。

VOID app_report_all_dp_status(VOID) { OPERATE_RET op_ret = OPRT_OK; INT_T dp_cnt = 0; dp_cnt = 12; TY_OBJ_DP_S *dp_arr = (TY_OBJ_DP_S *)Malloc(dp_cnt*SIZEOF(TY_OBJ_DP_S)); if(NULL == dp_arr) { PR_ERR("malloc failed"); return; } memset(dp_arr, 0, dp_cnt*SIZEOF(TY_OBJ_DP_S)); dp_arr[0].dpid = DPID_SWITCH_P; dp_arr[0].type = PROP_BOOL; dp_arr[0].time_stamp = 0; dp_arr[0].value.dp_value = plant_ctrl_data.Switch; ...... op_ret = dev_report_dp_json_async(NULL,dp_arr,dp_cnt); Free(dp_arr); if(OPRT_OK != op_ret) { PR_ERR("dev_report_dp_json_async relay_config data error,err_num",op_ret); } PR_DEBUG("dp_query report_all_dp_data"); return; }

任务函数,任务内循环调用的plant_get_adc_sensor_data()、plant_ctrl_handle()、plant_ctrl_all_off()都是第二层的接口,实现在plant_control.c文件中。

STATIC VOID sensor_data_get_adc_theard(PVOID_T pArg) { while(1) { PR_DEBUG("plant_get_adc_sensor_data"); tuya_hal_system_sleep(TASKDELAY_SEC*2); if(TRUE == plant_ctrl_data.Switch) { plant_get_adc_sensor_data(); } } } STATIC VOID sensor_data_deal_theard(PVOID_T pArg) { while(1) { tuya_hal_system_sleep(TASKDELAY_SEC); if(TRUE == plant_ctrl_data.Switch) { plant_ctrl_handle(); }else { plant_ctrl_all_off(); } } } STATIC VOID sensor_data_report_theard(PVOID_T pArg) { while(1) { tuya_hal_system_sleep(TASKDELAY_SEC*5); app_report_all_dp_status(); } }

deal_dp_proc()处理接受到的 DP 数据,通过识别 DP 来进行相应的数据接收处理。

VOID deal_dp_proc(IN CONST TY_OBJ_DP_S *root) { UCHAR_T dpid; dpid = root->dpid; PR_DEBUG("dpid:%d",dpid); switch (dpid) { case DPID_SWITCH_P: PR_DEBUG("set switch:%d",root->value.dp_bool); plant_ctrl_data.Switch = root->value.dp_bool; break; case DPID_PUMP: PR_DEBUG("set pump:%d",root->value.dp_bool); plant_ctrl_data.Pump = root->value.dp_bool; break; ...... default: break; } return; }

实现了上述的几个函数后,应用层代码的大概结构就已经确定下来了,接下来就需要实现上面提到的被调用的第二层接口,这些接口都放在本 Demo 的plant_control.c文件中。在下面的内容里,本篇 Demo 教程将根据实现的具体功能解说 Demo 例程。

三:灯光控制

本 Demo 方案实现了 RGBW 四路调光功能,可通过 App 调节各个颜色的灯的亮度值,从而调配出植物生长所需要的不同类型的光照。

通过输出PWM波的方式来调整灯的亮度,有关PWM的初始化和输出控制函数接口都实现在 plant_pwm.c中,在plant_device_init() 中初始化PWM,并在plant_ctrl_handle()中调用实现灯光控制逻辑的接口。

USER_PWM_DUTY_T user_pwm_duty = {0}; VOID plant_device_init(VOID) { ...... plant_pwm_init(); ...... } STATIC VOID __set_pwm_duty(VOID) { user_pwm_duty.duty_red = (USHORT_T)(((float)plant_ctrl_data.Red_value/255.0)*1000); user_pwm_duty.duty_green = (USHORT_T)(((float)plant_ctrl_data.Green_value/255.0)*1000); user_pwm_duty.duty_blue = (USHORT_T)(((float)plant_ctrl_data.Blue_value/255.0)*1000); user_pwm_duty.duty_warm = (USHORT_T)(((float)plant_ctrl_data.Warm_value/255.0)*1000); } STATIC VOID __initiative_ctrl_module_light(VOID) { if (plant_ctrl_data.Countdown_set != cancel) { if(IsThisSysTimerRun(light_timer) == FALSE) { light_flag_min = (USHORT_T)plant_ctrl_data.Countdown_set * 60; plant_pwm_set(&user_pwm_duty); sys_start_timer(light_timer,1000*60,TIMER_CYCLE); }else { plant_pwm_set(&user_pwm_duty); } }else { light_flag_min = 0; if(TRUE == plant_ctrl_data.Light_switch) { plant_pwm_set(&user_pwm_duty); }else { plant_pwm_off(); } } plant_report_data.Countdown_left = light_flag_min; } VOID plant_ctrl_handle(VOID) { ...... __set_pwm_duty(); __initiative_ctrl_module_light(); } 四:土壤湿度控制

本 Demo 方案使用的土壤湿度检测传感器可以根据土壤的湿度情况输出模拟量,因此代码上就需要通过ADC采集模拟量转换为数字量的方式来监测土壤湿度。

在app_plant.c文件中创建的获取ADC采集任务中循环调用了plant_control.c的plant_get_adc_sensor_data(),所有有关adc采集的代码都放在该函数接口内。

VOID plant_get_adc_sensor_data(VOID) { tuya_hal_adc_init(&tuya_adc); tuya_hal_adc_value_get(TEMP_ADC_DATA_LEN, &soil_moisture_value); PR_NOTICE("water_tank_value = %d",soil_moisture_value); tuya_hal_adc_finalize(&tuya_adc); }

获取土壤湿度值后,将该值与预设的三档湿度阈值做比较,决定水泵是否需要打开并浇水。具体与哪一档阈值比较是在 app 上设置的。除了自动控制浇水的模式外,本 Demo 也可以设置为手动浇水模式,通过面板上的水泵开关直接控制是否浇水。

在plant_ctrl_handle()中调用实现控制浇水逻辑的接口,引入了ADD_WATER_COUNT、ADD_WATER_READY两个变量,实现水泵每开启一段时间后就会关闭一段时间,防止浇水过度。

STATIC VOID __passive_ctrl_module_soil_humidity(VOID) { if(!ADD_WATER_READY) { tuya_gpio_write(WATER_PUMP_PORT, WATER_PUMP_LEVEL); ADD_WATER_COUNT++; if(ADD_WATER_COUNT >15) { ADD_WATER_READY = 1; ADD_WATER_COUNT = 0; } } switch (plant_ctrl_data.soil_moisture_level) { case manual_control: ADD_WATER_COUNT == 0; ADD_WATER_READY == 1; break; case low: if(soil_moisture_value > soil_moisture_threshold.Low) { if(ADD_WATER_READY) { tuya_gpio_write(WATER_PUMP_PORT, !WATER_PUMP_LEVEL); ADD_WATER_COUNT++; if(ADD_WATER_COUNT > 2) { ADD_WATER_READY = 0; } } }else { tuya_gpio_write(WATER_PUMP_PORT, WATER_PUMP_LEVEL); } break; case medium: if(soil_moisture_value > soil_moisture_threshold.Medium) { if(ADD_WATER_READY) { tuya_gpio_write(WATER_PUMP_PORT, !WATER_PUMP_LEVEL); ADD_WATER_COUNT++; if(ADD_WATER_COUNT > 2) { ADD_WATER_READY = 0; } } }else { tuya_gpio_write(WATER_PUMP_PORT, WATER_PUMP_LEVEL); } break; case high: if(soil_moisture_value > soil_moisture_threshold.High) { if(ADD_WATER_READY) { tuya_gpio_write(WATER_PUMP_PORT, !WATER_PUMP_LEVEL); ADD_WATER_COUNT++; if(ADD_WATER_COUNT > 2) { ADD_WATER_READY = 0; } } }else { tuya_gpio_write(WATER_PUMP_PORT, WATER_PUMP_LEVEL); } break; default: break; } } STATIC VOID __initiative_ctrl_module_pump(VOID) { if(plant_ctrl_data.soil_moisture_level != manual_control) { return; } if(TRUE == plant_ctrl_data.Pump) { tuya_gpio_write(WATER_PUMP_PORT, !WATER_PUMP_LEVEL); }else { tuya_gpio_write(WATER_PUMP_PORT, WATER_PUMP_LEVEL); } } VOID plant_ctrl_handle(VOID) { ...... // 水泵自动控制 __passive_ctrl_module_pump(); // 水泵手动控制 __initiative_ctrl_module_pump(); ...... }

至此,本 Demo 的大部分控制逻辑代码就基本完成了。在完善 DP 发送和接收部分后,即可开始后续的功能调试。如果您想了解 Demo 代码的更多细节,可以自行查看 Demo 例程。

五:编译和烧录

在 Linux 终端输入命令运行 SDK 环境目录下的 build_app.sh 脚本来编译代码生成固件。固件生成路径为 apps > APP_PATH > output。

命令格式:

build_app.sh

命令示例:

/home/share/samba/ci/ty_iot_wf_bt_sdk_bk7231t$ sudo sh build_app.sh apps/bk7231t_plant_grow_mach_demo bk7231t_plant_grow_mach_demo 1.0.0

成功返回示例:若出现下图所示提示,则表示编译成功,固件已经生成。

将固件烧录至模组后,即可开始功能调试阶段。有关烧录和授权方式请参考 WB 系列模组烧录授权。

第七步:设备控制 一:设备配网

在移动应用商店中(例如 App Store)下载涂鸦智能 App。

打开涂鸦智能 App,点击右上角 + 图标,添加设备。

image.png

选择 小家电 > 其他设备 > 植物生长机。

Screenshot_20210322_115746_com.tuya.smart.jpg

选择您的 Wi-Fi,并输入 Wi-Fi 密码。

等待配网成功。

Screenshot_20210322_115746_com.tuya.smart.jpg 二:清除配网信息

在更换用户账号、初始化设备、遗忘配网信息、遗忘绑定账号等情况下,您可以尝试清除配网信息。

方式一:在涂鸦智能 App 上移除设备

打开涂鸦智能APP。 长按设备列表任意设备,选择您添加的精简版植物生长机设备,点击移除设备。

方式二:给设备通断电三次

为精简版植物生长机设备接上电源,等待灯板亮白色光,拔掉电源。重复三次即可。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭