极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: zcbzjx

基于18B20+enc28j60+arduino+yeelink的远程温度监控

[复制链接]
发表于 2012-11-21 20:57:43 | 显示全部楼层
程序很棒,上传成功,感谢支持!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2012-11-21 21:04:33 | 显示全部楼层
erjiang 发表于 2012-11-21 10:48
哥们,W5100的使用,远远比enc的那个简单多啦!

主家真别笑话,菜手和麻瓜多得是,不一定都是合格水准。硬件既然能搭积木,软件为什么不可以呢,其实发布几个不同硬件配置的软件例程,对于上手很有意义。
回复 支持 反对

使用道具 举报

发表于 2012-11-21 21:22:57 | 显示全部楼层
zcbzjx 发表于 2012-11-21 10:27

老师,程序装在成功,已经运行中。

我先装在2560,不知道为什么会报错,但是运行正常。而放入UNO就一切正常,没有报错,不知道什么原因?
回复 支持 反对

使用道具 举报

发表于 2012-11-21 21:23:59 | 显示全部楼层
zcbzjx 发表于 2012-11-21 10:27

老师,是不是可以重新发布一个“基于18B20+w5100+arduino+yeelink的远程温度监控”的参考例程给大家呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-21 21:48:45 | 显示全部楼层
能不能把问题补充完整啊。大哥。。。
回复 支持 反对

使用道具 举报

发表于 2012-11-21 22:09:46 | 显示全部楼层
我错了,没问题了,换个USB口,就好了,谢谢老师。

不过,原来的错误信息如下图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2012-11-27 00:15:56 | 显示全部楼层
zcbzjx 发表于 2012-11-21 10:27

张老师,我在参考COSM例程,想使用更方便的DallasTemperature.h库,但是转换时候遇到一些问题。

void get_Send_String(){
  sensors.requestTemperatures(); // 发送命令获取温度
  char SensorReadOut = sensors.getTempCByIndex(0);
  Serial.println(SensorReadingOut );  
  dataLength = sprintf(sensorData,"{\"value\":%d}",SensorReadOut);  
}

用%d能得到结果,但是只有整数,失去了精度,能保留小数点以后两位小数就满足啦。现在的问题是,是不是一定要用sprintf函数,如何驾驭呢?

我的进一步想法,读取多个18B20,并且上传yeelink。Pachube/COSM有一个PachubeClientString,不是道在yeelink上面可否实现。
回复 支持 反对

使用道具 举报

发表于 2012-11-27 00:35:15 | 显示全部楼层
这是一个测试数据点,但是只有整数,应该是转换问题。
http://www.yeelink.net/devices/1255
回复 支持 反对

使用道具 举报

发表于 2012-11-27 08:51:50 | 显示全部楼层
muggle 发表于 2012-11-27 00:15
张老师,我在参考COSM例程,想使用更方便的DallasTemperature.h库,但是转换时候遇到一些问题。

void  ...

可以实现,只要演示发送就行了,在主程序中,设置一个timer,然后根据timer让传感器标志位自增,发送函数根据当前需要发送的传感器值,读取传感器数据并完成发送即可。

这个是客户端程序逻辑的设计问题,Yeelink本身功能是支持的。

如果你有时间看看张老师的传感器,在一个device下面,都会有数个sensor同时上传的,逻辑类似
回复 支持 反对

使用道具 举报

发表于 2012-11-27 21:49:29 | 显示全部楼层
张老师帮助下,终于通过了,虽然还不是很明白转换的过程。

    uint16_t Tc_100 = sensors.getTempCByIndex(0)*100;
    uint8_t i,whole, fract;
    whole = Tc_100/100 ;  // separate off the whole and fractional portions
    fract = Tc_100 % 100;
    dataLength = sprintf(sensorData,"{\"value\":%d.%d}",whole,fract);

得到如下输出:
{"value":21.25}

继续努力,多个18B20读取上传中
回复 支持 反对

使用道具 举报

发表于 2013-2-12 22:53:26 | 显示全部楼层
想请教下楼主,上传数据中有一段代码:
Stash::prepare(PSTR("POST /v1.0/device/$F/sensor/$F/datapoints HTTP/1.1" "\r\n"
    "Host: api.yeelink.net" "\r\n"
    "U-ApiKey: $F" "\r\n"
    "Content-Length: $D" "\r\n"
    "Content-Type: application/x-www-form-urlencoded" "\r\n" "\r\n"                       
    "$S"),
  DeviceID,SensorID,APIKey,dataLength,sensorData);
其中,$F $D 和 $S是不是分别指代下面的DeviceID、SensorID、APIKey、dataLength以及sensorData,那么,F D S的区别是什么?
谢谢了
回复 支持 反对

使用道具 举报

发表于 2013-2-13 22:06:16 | 显示全部楼层
xiake 发表于 2012-11-21 21:23
老师,是不是可以重新发布一个“基于18B20+w5100+arduino+yeelink的远程温度监控”的参考例程给大家呢?

建议你有空发一个哈
回复 支持 反对

使用道具 举报

发表于 2013-2-13 22:07:21 | 显示全部楼层
mazzond 发表于 2013-2-12 22:53
想请教下楼主,上传数据中有一段代码:
Stash::prepare(PSTR("POST /v1.0/device/$F/sensor/$F/datapoints ...

是的,分别代表了按顺序排列的变量,建议以后对变量吃不准的时候,用printf打印一下,或者打印到串口去,就一目了然拉,调试必备技巧
回复 支持 反对

使用道具 举报

发表于 2013-2-13 22:09:50 | 显示全部楼层
muggle 发表于 2012-11-27 21:49
张老师帮助下,终于通过了,虽然还不是很明白转换的过程。

    uint16_t Tc_100 = sensors.getTempCByIn ...

这个不难,主要是C语言一些技巧,其中的函数功能可以参考C手册
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-2-15 00:10:07 | 显示全部楼层
$F 替代char APIKey[] PROGMEM 定义的字符串变量,加了 PROGMEM关键字,该字符串是存储于flash中不能用$S要用¥F;
$D 替代uint8_t dataLength 定义的整数变量;
$S 替代char sensorData[20]定义的字符串变量;
具体可以查看下库文件。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-20 03:26 , Processed in 0.044435 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表