前言
物料到了好久了,但一直有事情,加上自己很懒就一直没有进度,准备从这周开始,每周抽出几个小时搞一搞,每周更新进展。
目录 (Table of Contents)
[TOCM]
如何实现?
可以在屏幕上观察植物的情绪状态。
根据所查询的资料,植物的情绪状态的研究很少,许多研究者觉得植物压根没有情绪状态,但我还是找到了一份有关于植物情绪的研究下载附件
保存到相册
2023-12-3 21:16 上传
安装python的一些库时发现了如下问题:
sudo pip3 install spidev
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
For more information visit http:
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
可以安照提示做也可以:
在 pip3 install package 后面加上参数 “--break-system-packages”
树莓派接入阿里云
首先是申请一个阿里云的账号,买一个服务器,我看有免费3个月的就用这个了。
因为树莓派是在本地wifi下,没有公网ip,所以在外边无法访问,需要做内网穿透(Port Forwarding),利用阿里云进行访问,具体操作如下:
在树莓派上设置SSH:
- 确保树莓派已安装SSH服务并已启动。
- 如果未启动SSH服务,可以通过运行
sudo systemctl enable ssh
和 sudo systemctl start ssh
命令来启动和使其自动启动。
在云服务器上设置SSH远程端口转发:
- 在树莓派上执行SSH命令,创建到云服务器的反向隧道。这个命令会将云服务器上的一个端口转发到树莓派的SSH端口。例如:
ssh -R [云服务器端口]:localhost:22 [云服务器用户名]@[云服务器IP地址]
从外部网络访问树莓派:
现在,您可以通过云服务器来访问树莓派。在任何地方使用以下命令:
ssh [树莓派用户名]@localhost -p [云服务器端口]
这种方法通过SSH隧道保证了连接的安全性。
实现环境温度和土壤湿度检测
器材
1 x Moisture sensor
1 x LM35 Temperatures sensor
1 x ADS115 ADC
连线
因为ADS1154路16位ADC,I2C接口,所以温度和土壤湿度的检测都需要经过它才使被树莓派获得结果。
调试
测试ADS115,代码如下:
import board
import busio
import time
i2c = busio.I2C(board.SCL, board.SDA)
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
ads = ADS.ADS1115(i2c)
chan = AnalogIn(ads, ADS.P2)
while True:
print(chan.value)
time.sleep(0.1)
结果:
9246
8587
9301
8573
9313
8567
9298
8553
9312
8535
9269
8556
9102
8660
9258
8711
9699
8444
9353
8756
8973
9061
8595
9365
8297
9636
8139
接下来是关于传感器结果的部分,首先是要对土壤检测进行标定,然后是矫正温度,接下来是过程:
在水中:
Temperature =45
Moisture % =7148
空气中:
Temperature =45
Moisture % =17539
标定后:
Temperature =45
Moisture % =0
土壤湿度检测:
Temperature =45
Moisture % =67
矫正温度:
Temperature =22
Moisture % =67
湿度的准确性我无法确定,但温度检测是22摄氏度,我家的小米温度计显示是21.2摄氏度,差了快一度,也就这样吧~
本阶段代码:
import time
import socket
import board
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
i2c = busio.I2C(board.SCL, board.SDA)
ads = ADS.ADS1115(i2c)
Moisture_channel = AnalogIn(ads, ADS.P2)
LM35_channel = AnalogIn(ads, ADS.P1)
def _map(x, in_min, in_max, out_min, out_max):
return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
while True:
Moisture_Value = Moisture_channel.value
Moisture_Percent = _map(Moisture_Value, 17418, 7440, 0, 100)
ads_ch0 = LM35_channel.value
ads_Voltage_ch0 = ads_ch0 * ads_bit_Voltage
Temperature = int(ads_Voltage_ch0 / lm35_constant)
print("Temperature = ", Temperature)
print("Moisture % = ", Moisture_Percent)
温度的优化设想
家里有小米的温度计,该温度计是通过蓝牙连接的,是否可以用树莓派直接获得温度计的值,这样更准确,还能减少几条线。我查了有这样的开发,github仓库如下:
这几天抽空研究下,看看能不能实现,哈哈哈。
下周计划
已经做了内网穿透,下周做个界面和接口,试着将树莓派采集的信息传到某个端口,并通过阿里云在外网访问。
实现树莓派直接访问小米温湿度计。
光照、摄像头拍照、LCD显示、情绪设置和图片等等这些乱七八糟的有时间就搞上。