5.4 本地 Contiki 的 Ubidots IPv6 示例

本示例将演示 Contiki Ubidots 库的基本功能:

  • 如何使用库 post 到一个变量。
  • 如何使用库 post 到一个集合。
  • 如何获取 HTTP (部分)响应。

目前,Ubidots 的示例已经合并到 Contiki 的源码中,您也可以在 George Oikonomou 的仓库中找到一些函数示例。

George Oikonomou 完成了 Contiki 中的 Ubidots 库的编写。

Ubidots 示例位于examples/ipv6/ubidots

Ubidots 应用程序位于apps/ubidots

Ubidots 应用程序使用 TCP 套接字连接到主机things.ubidots.com。主机的 IPv4 和 IPv6 端点配置如下:

图 5.4. Ubidots 端点IPv4/IPv6 地址

为了检查程序运行状态,可在ubidots.c文件中使能调试打印,搜索#define DEBUG DEBUG_NONE,并替换为#define DEBUG DEBUG_PRINT

默认情况下, Ubidots 应用程序使用things.ubidots.com作为远程主机。不过,如果您没有解析主机地址的 NAT/NAT64 服务,可以明确地将 IPv6 远程主机定义为:

#define UBIDOTS_CONF_REMOTE_HOST "2607:f0d0:2101:39::2"

如果您没有本地 IPv6 连接,可以使用 gogo6 或 hurricane electric 等提供的 IPv4toIPv6 隧道化服务,也可以使用 wrapsix 等提供的 NAT64 服务实现 IPv6 与 IPv4 的地址转换。

Ubidots 示例将每 30 秒 Post Z1 节点的运行时间和序列号,如前面章节一样,我们需要在 Ubidots 中创建两个变量。 创建数据源和变量,然后打开project-conf.h文件,并替换成以下内容:

#define UBIDOTS_DEMO_CONF_UPTIME "XXXX"
#define UBIDOTS_DEMO_CONF_SEQUENCE "XXXX"

最后一步关联固定的 Ubidots 短令牌,这样令牌过期后就不必再请求令牌。将令牌添加到Makefile

DEFINES+=PROJECT_CONF_H=\"project-conf.h\"
CONTIKI_PROJECT = ubidots-demo
APPS = ubidots
UBIDOTS_WITH_AUTH_TOKEN=XXXXXXXX
ifdef UBIDOTS_WITH_AUTH_TOKEN
DEFINES+=UBIDOTS_CONF_AUTH_TOKEN=\"$(UBIDOTS_WITH_AUTH_TOKEN)\"
endif
all: $(CONTIKI_PROJECT)
CONTIKI_WITH_IPV6 = 1
CONTIKI = ../../..
include $(CONTIKI)/Makefile.include

注意,UBIDOTS_WITH_AUTH_TOKEN没有使用引号 “” 。 现在基本完成了设置,下面开始编译和烧写 Z1 节点:

make TARGET=z1 savetarget
make clean && make ubidots-demo.upload && make z1-reset && make login

可以看到如下输出:

connecting to /dev/ttyUSB0 (115200) [OK]
Rime started with address 193.12.0.0.0.0.0.158
MAC c1:0c:00:00:00:00:00:9e Ref ID: 158
Contiki-d368451 started. Node id is set to 158.
nullmac nullrdc, channel check rate 128 Hz, radio channel 26
Tentative link-local IPv6 address fe80:0000:0000:0000:c30c:0000:0000:009e
Starting 'Ubidots demo process'
Ubidots client: STATE_ERROR_NO_NET
Ubidots client: STATE_ERROR_NO_NET
Ubidots client: STATE_ERROR_NO_NET
Ubidots client: STATE_STARTING
Ubidots client: Checking 64:ff9b::3217:7c44
Ubidots client: 'Host: [64:ff9b::3217:7c44]' (remaining 44)
Ubidots client: STATE_TCP_CONNECT (1)
Ubidots client: STATE_TCP_CONNECTED
Ubidots client: Prepare POST: Buffer at 199
Ubidots client: Enqueue value: Buffer at 210
Ubidots client: POST: Buffer at 211, content-length 13 (2), at 143
Ubidots client: POST: Buffer at 208
Ubidots client: STATE_POSTING (176)
Ubidots client: STATE_POSTING (176)
Ubidots client: STATE_POSTING (144)
Ubidots client: STATE_POSTING (112)
Ubidots client: STATE_POSTING (80)
Ubidots client: STATE_POSTING (48)
Ubidots client: STATE_POSTING (16)
Ubidots client: STATE_POSTING (0)
Ubidots client: HTTP Reply 200
HTTP Status: 200
Ubidots client: New header: <Server: nginx>
Ubidots client: New header: <Date: Fri, 13 Mar 2015 09:35:08 GMT>
Ubidots client: New header: <Content-Type: application/json>
Ubidots client: New header: <Transfer-Encoding: chunked>
Ubidots client: New header: <Connection: keep-alive>
Ubidots client: New header: <Vary: Accept-Encoding>
Ubidots client: Client wants header 'Vary'
H: 'Vary: Accept-Encoding'
Ubidots client: New header: <Vary: Accept>
Ubidots client: Client wants header 'Vary'
H: 'Vary: Accept'
Ubidots client: New header: <Allow: GET, POST, HEAD, OPTIONS>
Ubidots client: Chunk, len 22: <[{"status_code": 201}]> (counter = 22)
Ubidots client: Chunk, len 0: <(End of Reply)> (Payload Length 22 bytes)
P: '[{"status_code": 201}]'
图5.5 Ubidots 曲线图

上图使用曲线图和数值表显示相关变量。

results matching ""

    No results matching ""