我们已经设计了一款功能极全面的 智慧植物生长系统,解决了几乎所有植物生长机的功能需求。但由于功能较为全面,不便于快速制作,然后我们又设计了这款精简版的智能植物生长机,让您能够快速制作出一台智能植物生长机。
为了方便更多涂鸦爱好者制作植物生长机,这款精简版的智能植物生长机将会实现以下功能:
方便开发者快速实现各种智能硬件产品原型的一款开发板。查看详情
用来实现 DC 12V 供电、5V 水泵控制、读取土壤湿度模拟量、4 路 PWM 灯板控制。
用来实现 RGBW 四路调光功能,可通过 App 调节各个颜色的灯的亮度值,从而调配出植物生长所需要的不同类型的光照。
解决浇水动力输出。
检测土壤湿度
推荐规格为 80mm,2p,XH单头
推荐规格为150mm,3p,XH双头一正一反
推荐规格为400mm,5P,XH双头一正一反
外形搭建
推荐采用 3D 打印
推荐规格为标准件
推荐规格为标准件
与水泵链接
我们选取 涂鸦三明治 Wi-Fi SoC 主控板(WB3S) 作为主控。由此,我们需要设计一块智能植物生长机功能板,它可以实现以下功能:
相关设计思路如下:
原理图(点击下载原理图 PDF 文件)
PCB 设计(点击下载 PCB PDF 文件)
PCB 制板(点此下载 Gerber ZIP 文件)
绘制坐标文件(点击下载 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 |
波长辐射范围 | 影响 |
---|---|
大于 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 文件)
PCB 设计(点击下载PDF文件)
PCB 制板(点此下载 Gerber ZIP 文件)
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 |
使用8mm亚克力切割和热弯制成,用于固定灯板和水箱。
用于盛水或者水杯,另外在其内部放置主控板和功能板。整体采用 PLA 材质,通过 3D 打印制作而成。
水箱盖(点此下载 STL 文件)
整体盖(点此下载 STL 文件)
整体部分(点此下载 STL 文件)
相关物料,请参考上文物料章节。
完成整机搭建后,还需要在 IoT 平台上创建智能产品,创建产品后您才能获得相关嵌入式开发包,进行智能设备的 TuyaOS 开发。该产品代表了智能设备在 IoT 平台上的功能映射、包含了相关授权信息、产品配置等,方便植物生长机与 IoT 平台的通信。本小节步骤介绍了您在平台上创建植物生长机的主要步骤,详细步骤请参考 选品类创建产品。
进入 涂鸦 IoT 平台,点击创建产品。选择 小家电 > 宠物 > 植物生长机。
选择自定义方案,输入产品名称,选择通讯协议为WIFI+蓝牙,点击创建产品。
在 功能定义 阶段,添加标准功能,选择 开关、水泵开关、倒计时、倒计时剩余时间、故障告警。
功能点名称、枚举值等,您可自行编辑修改。
在自定义功能区域,点击添加功能按钮,编辑功能点名称、标识名,勾选数据类型和数据传输类型即可完成功能点创建。
要实现所有的设备功能,还需要根据功能需求自行创建额外的 DP 功能点。
添加 红灯设置、绿灯设置、蓝灯设置、暖灯设置 4 个 DP 点,用于设置四路 LED 灯的亮度,实现 RGBW 调光的功能。
添加 灯光开关,布尔型 DP,用于控制灯的开关。
添加 土壤湿度等级,枚举型 DP,用于设置水泵自动浇水的阈值等级。
设定完功能点后,下一步点击设备面板,选择 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 应用代码主要分三层来实现:
第一层是在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 <APP_PATH> <APP_NAME> <APP_VERSION>
命令示例:
/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,点击右上角 + 图标,添加设备。
选择 小家电 > 其他设备 > 植物生长机。
选择您的 Wi-Fi,并输入 Wi-Fi 密码。
等待配网成功。
在更换用户账号、初始化设备、遗忘配网信息、遗忘绑定账号等情况下,您可以尝试清除配网信息。
方式一:在涂鸦智能 App 上移除设备
方式二:给设备通断电三次
为精简版植物生长机设备接上电源,等待灯板亮白色光,拔掉电源。重复三次即可。
至此,一款精简版的智能植物生长机就制作完成了,它可以App远程遥控、土壤湿度监测、自动浇水、远程控制灯板颜色等功能。您可以基于涂鸦 IoT 平台丰富它的功能,您还可以更加方便的搭建更多智能产品原型,加速智能产品的开发流程。恭喜您完成了一款智能植物生长机的原型开发。