Highnose
发表于 2022-1-24 13:37
ht256929 发表于 2022-1-24 13:20
https://www.arduino.cn/forum.php?mod=viewthread&tid=90648&highlight=json
具体我没仔细研究,因为我 ...
好的,谢谢你!:handshake
jerryiot
发表于 2022-1-24 16:45
本帖最后由 jerryiot 于 2022-1-24 16:47 编辑
Highnose 发表于 2022-1-24 13:37
好的,谢谢你!https://www.jerrycoding.com/article/esp8266-clock-2/
https://arduinojson.org/v6/assistant
JSON解析助手啊
https://cdn.jerrycoding.com/media/ckeditor_upload/2022/01/15/image_OFsUOFJ.png
longjunling
发表于 2022-1-26 13:25
本帖最后由 longjunling 于 2022-1-26 13:28 编辑
void turang()//土壤值读取
{
uint8_t i;
for (i = 0; i < 20; i++) { //连续取采集多个样本,缺点AD读取会有延迟
LeiJi = analogRead(TR); //读取土壤湿度传感器的值
Blinker.delay(100);
}
TRzhi = 0; //平均所有值
for (i = 0; i < 20; i++) {
TRzhi += LeiJi;
}
//Serial.println(TRzhi);//串口输出土壤值
TRzhi = map(TRzhi, Amin, Amax, 0, 100); //校准值转换成0-100
TRzhi = constrain(TRzhi, 0, 100); //将传感器值的范围限制在0到100之间
Blinker.delay(1000);
}
我用8266也连上了,但是土壤湿度值这部分一直是100,这里要怎么调证吗?
longjunling
发表于 2022-1-26 13:48
本帖最后由 longjunling 于 2022-1-28 13:39 编辑
还有一个问题,在手动开启手动浇水后,如果湿度过高自动关闭继电器,app上的手动浇水图标仍然是高亮状态,没收更新继电器状态。还有,现在是app端的浇水次数是在开始浇水后每更新一次就累计一次,应该是继电器每打开一次累加一次吧。
longjunling
发表于 2022-1-26 15:32
用湿度传感器不行,土壤湿度一直显示100,用电位器输入电压模拟湿度传感器就读取正常,应该是我的湿度传器电有问题,请问一下你用的是什么样的土壤湿度传感器?
ht256929
发表于 2022-1-28 23:17
longjunling 发表于 2022-1-26 13:48
还有一个问题,在手动开启手动浇水后,如果湿度过高自动关闭继电器,app上的手动浇水图标仍然是高亮状态, ...
具体的可以加代码更新状态,我搞了后没有插在花盆里面
ht256929
发表于 2022-1-28 23:19
longjunling 发表于 2022-1-26 15:32
用湿度传感器不行,土壤湿度一直显示100,用电位器输入电压模拟湿度传感器就读取正常,应该是我的湿度传器 ...
我用的电容式湿度传感器 ,用手捏着湿度都是百分之百,你可以优化一下
ht256929
发表于 2022-1-28 23:22
longjunling 发表于 2022-1-26 13:25
void turang()//土壤值读取
{
uint8_t i;
你把土壤湿度传感器从土里拔出来试试看下湿度值有没有变化
ht256929
发表于 2022-1-29 00:16
longjunling 发表于 2022-1-26 13:25
void turang()//土壤值读取
{
uint8_t i;
LeiJi = analogRead(TR); //读取土壤湿度传感器的值
这行代码下加一句串口输出 看下LeiJi的值,读取土壤湿度传感器在花盆土壤干燥的时候的值 修改uint16_t Amin = 60700 的值。然后花盆浇水浇透后看下LeiJi值是多少。修改uint16_t Amax = 24200后面的数值。我这两个值一个直接把土壤湿度模块放在外面和泡在水里读取的。实用性不是很好
ht256929
发表于 2022-1-29 00:56
longjunling 发表于 2022-1-26 13:48
还有一个问题,在手动开启手动浇水后,如果湿度过高自动关闭继电器,app上的手动浇水图标仍然是高亮状态, ...
反馈开关状态,你在下面三行代码上面加Button2.print("off"); 反馈开关按钮状态的代码试下,
Blinker.println("土壤潮湿,不需要浇水");
Blinker.println("温度过高,不适宜浇水");
Blinker.println("空气湿度高,可能会下雨!");
浇水次数的话确实没有算手动浇水次数,你可以这样修改一下试试
int ci = 0, zhi = 40; 改为int ci = 0, ci1=0,zhi = 40;
void button2_callback(const String & state)//手动浇水
{
BLINKER_LOG("get button state: ", state);
if (state == "on")
{
digitalWrite(JDQ, HIGH);
// 反馈开关状态
Button2.print("on");
B = "开始手动浇水";
}if (state == "off") //按照例程else if无法关闭
{
digitalWrite(JDQ, LOW);
// 反馈开关状态
Button2.print("off");
B = "停止手动浇水";
}
Blinker.delay(300);
}改为
void button2_callback(const String & state)//手动浇水
{
BLINKER_LOG("get button state: ", state);
if (state == "on")
{
digitalWrite(JDQ, HIGH);
// 反馈开关状态
Button2.print("on");
ci1++;
B = "开始手动浇水";
}if (state == "off") //按照例程else if无法关闭
{
digitalWrite(JDQ, LOW);
// 反馈开关状态
Button2.print("off");
B = "停止手动浇水";
}
Blinker.delay(300);
}
ci_read = ci;//浇水次数改为ci_read = ci+ci1;//浇水次数
具体你只有试,我不是很懂C语言。编程我更加不懂。只会如果则,开发版和电脑不在身边我测试不了。错了别笑话。我只试觉得这样应该是可以的