你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【MCU实战经验】+stm32f4 + uCOS-III(V3.0.3) + LWIP(V1.4.0)应用与结贴

[复制链接]
stm32f103vc 发布时间:2014-4-14 11:06
说完了【MCU实战经验】+stm32f4 + uCOS-III(V3.0.3) + LWIP(V1.4.0) ,总觉得该用网络做点什么来结尾。后来看到这个活动里,有人提到Yeelink ,后来看了下,觉得还是不错的。就玩了一下,之前的网友说的稍显简略,我在这里就狗尾续貂说一下,这个网站怎么用吧。) q' K8 ?7 o1 S# x
首先,主页http://www.yeelink.net/。进去之后注册,注册之后会有一个API-KEY用于验证你访问网站上注册设备的权限,然后是建立你的设备,传感器,同时网站会产生设备ID和传感器ID,这些会在后面的HTTP请求里用到。
$ ~3 Q/ L( y* X4 Z5 U4 o# p  \层次结构是:一个设备包含很多传感器,一个传感器包含很多数据点。
- u; `& x7 |0 \  W1 \& Y7 |; o* l其次,和网站进行互动,实质是通过HTTP协议传输一些请求,比如POST,PUT,DELETE。你可以通过查看相关API来了解什么样的请求完成什么样的功能,一看便知。令人欣慰的是,这个网站有个人性化的地方,就是这里http://www.yeelink.net/developer/debug,你可以通过设置相应的接口,API-KEY,HTTP请求方式,POST数据,在不用任何终端的情况下,进行调试。这些内容怎么填,根据你的需要(创建数据点?,编辑数据点?,删除数据点?或是管理传感器),去看网站上提供的API说明http://www.yeelink.net/developer/apidoc/11,填好之后,点击发送,相应的HTTP请求和服务器响应会出现在下面。
/ |" j' ?& V- R2 U3 }6 }7 yPOST /v1.0/device/xxxx/sensor/xxxxx/datapoints HTTP/1.1
. F; U8 R8 `5 C: o4 `0 P& v: ]7 XUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0.1) Gecko/20100101 Firefox/9.0.13 r, m5 v. ~+ x5 X' |* b% o1 x3 Q2 b
Host: api.yeelink.net
8 R6 e9 R3 v* c- L- q$ n  r$ y% sAccept: */*+ C# Z' S5 I: D  N$ X+ [$ M' T3 ]
U-ApiKey: xxxxxxxxxxxxxxxxxxxxxxxx
( C% z: N/ \2 zContent-Length: 11
2 H9 b: m1 i, r# b$ u7 i9 iContent-Type: application/x-www-form-urlencoded( {% d" k4 u5 o) Z7 Q  M1 h
{"value":1}
" o% w" r- W2 q1 g& e# W, t而这些HTTP请求字符串就是你的终端要发给服务器的数据。所以就算你不了解HTTP,也可以玩。话多了,自己探索吧。待会儿上传个tcp/udp客户端服务器的软件。也可以用这个软件测试下,这个网站的功能,这样就避免了在网站内部测试忽略了实际上网络传输的过程。: L+ Q* ^4 F" r6 A. ?5 E" f
实现与yeelink数据交互,首先要在网站上注册并创建设备和传感器。然后调好stm32的网络终端(这里要实现的是一个tcp客户端,对于带os的lwip来说,就是创建一个线程,具体过程可以参考老衲五木的最后一章API的使用说明,测试可以用我待会儿上传的那个软件)。然后连接到可以访问网络的路由器,注意路由器的设置与stm32网络终端的ip获得方式要一致,要么静态ip,要么dhcp。我用的dhcp,一旦成功获得ip地址,就可以正常访问网络了。接下来就是根据你的要求,进行建立,绑定,连接,发送,释放的过程了。服务器使用的端口是http通用的80端口。+ `5 i  i0 y" W' s( E) y
最后再说一句,如果你想用dns的话,可以在lwipopts.h中设置LWIP_DNS为1,同时修改一个MEMP_NUM_SYS_TIMEOUT宏,这个宏是当前超时事件数,你添加了一个功能超时事件数就会增加,因此必须与之对应,实际上设置LWIP_DHCP为1的时候也可能出现这个状况。在定义了LWIP_DNS之后,在init.c的初始化函数中多调用一个dns_init函数。之后就可以用netconn_gethostbyname函数获得ip地址了,这个函数只有两个参数,一个const char* 是穿进去的网站网址,另一个是一个ip地址结构体指针,用于填充解析出来的ip地址。返回值是一个结果" k! ~% P, F* l" |8 Y/ x
 * @return ERR_OK: resolving succeeded, s1 n5 @/ A6 p1 B; E
 *         ERR_MEM: memory error, try again later
2 E% F: y, }9 j1 ^! B/ F( Y *         ERR_ARG: dns client not initialized or invalid hostname
7 f! w7 T5 q# I- v *         ERR_VAL: dns server response was invalid' n  O* P! u8 g) ^% ~
一个细节,DNS采用的域名解析的服务器默认是208.67.222.222,查了一下,美国的resolver1.opendns.com。同样你也可以用dns_setserver设置DNS服务器ip地址。里面有两个参数,一个是索引号,一个是服务器的ip地址。索引号是不能大于DNS_MAX_SERVERS这个宏的。
: E5 g2 m/ y3 A6 r, N另一说明,LWIP实现的DHCP和DNS都是客户端,有人想实现服务器可能要自己搞哦。
% M8 X! p& A# U- C1 t好了,终于说完了。热烈欢迎拍砖讨论!

SocketTool.rar

下载

404.84 KB, 下载次数: 234

收藏 1 评论7 发布时间:2014-4-14 11:06

举报

7个回答
Sino 回答时间:2014-4-14 13:59:06

回复:【MCU实战经验】+stm32f4 + uCOS-III(V3.0.3) + LWIP(V1.4.0)应用与结贴

正在做这方面的应用    顶一下   我用的wifi模块  不知道wifi模块应该怎么设置啊  是否需要用到SOCKET呢  请楼主赐教
Sino 回答时间:2014-4-14 14:09:01

回复:【MCU实战经验】+stm32f4 + uCOS-III(V3.0.3) + LWIP(V1.4.0)应用与结贴

不好意思  第二个问题解决了   应该是用冒号分隔数据
沐紫 回答时间:2014-4-14 14:31:58

回复:【MCU实战经验】+stm32f4 + uCOS-III(V3.0.3) + LWIP(V1.4.0)应用与结贴

回复第 3 楼 于2014-04-14 14:09:01发表:
4 j. M6 i7 X; {. Z不好意思  第二个问题解决了   应该是用冒号分隔数据 
5 v" ^, i$ c5 _1 k5 B5 o" H0 O0 }( X5 g, g' e4 N# a
继续加油!
stm32f103vc 回答时间:2014-4-14 21:03:30

RE:【MCU实战经验】+stm32f4 + uCOS-III(V3.0.3) + LWIP(V1.4.0)应用与结贴

wifi模块是什么接口?串口?sdio?不过话说回来都没用过,不过实质都是用tcp传输数据亦或用AT指令实现,具体要看你硬件的手册和相关资料了。有问题继续讨论了
雨中绵羊 回答时间:2014-6-27 18:58:34

RE:【MCU实战经验】+stm32f4 + uCOS-III(V3.0.3) + LWIP(V1.4.0)应用与结贴

LZ能发个历程文件吗?求指导啊。。
changzehai 回答时间:2018-5-16 20:51:02
谢谢楼主
板子粉丝 回答时间:2018-5-17 08:52:15
谢谢楼主,好资料!
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版