在 树 莓 派 中 使 用 Thingworx Edge java SKD 来 从 Am2302 中 读 取 温 湿 度 数 据 Revison History
版 本 # 日 期 ThingWorx 版 本 改 变 所 有 者 1.0 2.0 21-11-14 3.0 17-12-14 4.0 19-12-14 DeAnna Robear Veronica MIHAI 使 用 you 而 不 是 we, 添 加 版 权 和 封 面 页, Veronica 修 改 页 脚 MIHAI 在 Andy 的 建 议 下, 修 改 封 面 字 体 页 脚 Veronica 审 查 表 和 版 权 段 落 在 文 档 中 的 位 置 MIHAI 5.0 26.01.15 添 加 了 关 于 App key 的 备 注 Veronica MIHAI 树 莓 派 温 湿 度 传 感 器 集 成 的 ThingWorx 实 例 第 一 部 分, 在 树 莓 派 上 (Raspberry Pi) 1. 开 始 之 前 请 安 装 下 面 的 安 装 包 ; 首 先 您 需 要 建 立 树 莓 派 的 网 络 连 接, 建 议 使 用 类 似 PuTTy 的 程 序 通 过 SSH 进 入 Pi sudo apt-get update: 一 个 完 整 的 Pi 的 软 件 更 新 sudo apt-get install oracle-java7-jdk:thingworx 需 要 Java JDK7, 因 此 您 可 运 行 Java 虚 拟 机 (JVM) 和 其 他 程 序, 这 些 程 序 确 保 树 莓 派 可 运 行 用 Java 代 码 编 写 的 小 程 序 和 应 用 2. 在 树 莓 派 中 创 建 路 径 保 存 您 的 项 目 创 建 一 个 新 的 路 径 的 命 令 是 mkdir, 运 行 如 下 命 令 :mkdir projects 3. 导 航 到 您 刚 刚 创 建 的 新 路 径, 使 用 命 令 :cd 4. 对 于 AM2302 传 感 器 进 行 必 要 的 电 缆 连 接, 并 且 下 载 必 要 的 软 件 和 库 AM2302 传 感 器 有 三 根 线 需 要 连 接 到 树 莓 派 管 脚 这 个 Adafruit 教 程 指 导 您 连 线 和 装 一 个 python 库, 这 让 您 通 过 一 个 简 单 的 命 令 sudo./adafruitdht.py 2302 4 可 读 取 AM2302 温 湿 度 传 感 器 的 数 据, 其 中 2302 是 传 感 器 的 名 字,4 是 连 接 到 传 感 器 数 据 线 的 管 脚 数 当 您 在 你 的 projects 文 件 夹 中, 确 保 在 您 的 projects 文 件 夹 下 运 行 git clone https://github.com/adafruit/adafruit_python_dht.git 命 令 来 安 装 Adafruit_Python_DHT 库, 因 为 库 的 路 径 是 硬 编 码 在 EMS 的 jar 文 件 里 的 Server) PTC 2
注 : 如 果 您 使 用 的 是 MAC 计 算 机, 同 样 可 以 复 制 粘 贴 这 些 命 令, 如 果 使 用 的 是 windows 计 算 机, 可 以 使 用 CTRL + C 进 行 复 制, 但 是 粘 贴 到 PuTTy 窗 口 需 要 用 鼠 标 左 键 点 击 接 下 来, 下 载 一 个 EMS 项 目, 将 数 据 从 Am2302 传 感 器 传 送 到 Thingworx 平 台 EMS 项 目 基 本 上 是 一 种 具 有 如 下 结 构 的 Java 项 目 : 在 TempAndHumidityThing.java 文 件 中, 在 java 的 Process 类 的 帮 助 下, 读 取 了 传 感 器 的 温 湿 度 值 结 果 中 包 含 的 温 湿 度 值 格 式 为 Temp=29.0 *C Humidity=36.0% ( 如 下 图 所 示 ), 该 结 果 同 时 存 储 在 一 个 字 符 串 中, 之 后 被 解 析 来 获 取 属 性 的 数 值 Server) PTC 3
下 面 你 可 找 到 一 小 段 gettemperature() 函 数 的 程 序, 同 上 面 提 到 的 类 一 样 private Double gettemperature(){ String consoleoutput; if (simulated!=null&&simulated.equals("simulated")) { consoleoutput = getsimulatedconsoleoutput(); } else { consoleoutput=getcommandresults("sudo"+pi_home+ PATH_TO_TEMP_HUMID_COMMAND + "2302 4"); // line with the pin number to which the data wire of the sensor is connected on the RPI } Double temperature= parsetemperaturefromstring(consoleoutput); return temperature; } 注 : 如 果 您 选 择 连 接 Am2302 传 感 器 到 不 同 的 数 据 引 脚, 则 同 时 需 要 更 新 以 上 命 令, 否 则 不 能 正 确 地 从 传 感 器 中 读 出 数 据 consoleoutput=getcommandresults("sudo"+pi_home+ PATH_TO_TEMP_HUMID_COMMAND + " 2302 4"); // 使 用 连 接 你 的 Am2302 传 感 器 的 数 据 线 的 管 脚 数 代 替 4 之 后, 可 以 使 用 maven 打 包 Java 项 目 成 为 可 运 行 的 jar 文 件, 命 名 为 temperature-thing-jarwith-dependencies, 然 后 将 其 部 署 到 Raspberry Pi 中 Server) PTC 4
如 果 使 用 DHT22 传 感 器 代 替 Am2302 传 感 器, 您 需 要 在 getcommandresults 类 的 成 员 函 数 中 把 2302 改 写 22, 包 括 gettemperature 和 gethumidity 类 成 员 函 数 您 将 需 要 重 新 打 包 并 部 署 jar 文 件 到 Rasperry Pi, 更 多 关 于 怎 样 使 用 maven, 请 阅 读 下 面 的 文 档 第 二 部 分 : 在 您 的 计 算 机 上 1. 从 这 儿 下 载 并 提 取 EMS 和 项 目 文 件, 确 保 提 取 文 件 到 您 的 主 目 录 下 为 了 找 到 主 目 录, 打 开 命 令 窗 口 并 且 输 入 echo %HOME% ( 若 无 效, 尝 试 %userprofile%), 然 后 输 入 ls ( 若 无 效, 尝 试 输 入 dir), 然 后 按 enter 键 2. 从 这 儿 下 载 安 装 java JDK7 需 要 JVM 和 其 他 文 件 ( 如 上 ) 3. 从 这 儿 下 载 安 装 Apache Maven 使 用 它 来 管 理 building/testing/deploying 进 程, 它 还 可 Server) PTC 5
以 处 理 所 有 项 目 相 关 的 下 载 安 装 和 版 本 更 新 4. Maven 应 当 被 添 加 到 您 的 PATH 环 境 变 量 中, 因 此 它 可 以 在 命 令 行 被 使 用 : 点 击 开 始 菜 单 找 到 并 选 中 计 算 机, 右 键 单 击 计 算 机 并 选 择 属 性 选 择 高 级 系 统 设 置 来 到 系 统 属 性 窗 口, 选 中 环 境 变 量 : Server) PTC 6
在 系 统 变 量 下 向 下 滚 动, 并 且 找 到 路 径 Path, 然 后 点 击 编 辑 选 择 所 有 的 文 本 并 将 其 复 制 到 一 个 程 序 中, 这 样 您 可 看 到 整 个 文 本 : Server) PTC 7
上 面 高 亮 度 标 记 的 部 分 需 要 添 加 路 径, 您 可 以 找 到 该 位 置, 打 开 文 档 Systems (C:) Program File (x86) apache- maven-3.2.1 bin 然 后 点 击 顶 部 空 白 处, 获 得 一 个 能 被 复 制 位 置 5. 添 加 Java 到 用 户 变 量, 这 样 您 可 使 从 命 令 行 使 用 Java 在 User variables for 下 面 选 择 New, 然 后 键 入 JAVA_HOME 名 称 ( 确 保 所 有 子 母 为 大 写 ), 粘 贴 Java 位 置 到 变 量 值 域 中 Server) PTC 8
注 :Java 的 位 置 是 计 算 机 System (C:) Program Files Java jdk1.7.0_60 第 三 部 分 : 建 立 例 子 为 了 建 立 EMS, 打 开 命 令 行, 输 入 cd, 而 后 到 已 提 取 文 件 的 路 径, 然 后 使 用 如 下 命 令 : mvn package: 该 命 令 将 在 target 中 创 建 发 布 版 的 jar ( temperature-thing-jar-withdependencies.jar), 使 得 EMS 可 推 送 数 据 到 ThingWorx Server) PTC 9
第 四 部 分 : 部 署 你 的 例 子 到 一 个 Raspberry PI 1. 一 旦 jar 被 创 建, 就 可 以 自 动 将 结 果 传 送 到 Raspberry Pi 来 进 行 测 试 为 此 需 要 复 制 settings.xml 到 Computer Systems(C:) Program File (x86) apache-maven-3.2.1 conf 路 径 下 粘 贴 该 文 件 进.m2 目 录 下, 位 于 Data (D:) 用 户 你 的 用 户 登 录 名.m2 注 : 如 果 settings.xml 已 经 存 在, 不 要 覆 盖 2. 该 设 置 文 件 是 要 告 诉 maven 树 莓 派 的 用 户 名 和 密 码 在 程 序 notepad 或 者 word 中 打 开 Server) PTC 10
settings.xml, 输 入 您 的 Raspberry Pi 用 户 名 和 密 码, 默 认 的 用 户 名 是 pi, 密 码 是 raspberry 退 出 前 要 保 存 3. 继 续 下 一 步 之 前, 您 必 须 生 成 一 个 应 用 程 序 键 (Application Key), 一 个 应 用 程 序 键 的 任 务 是 识 别 调 用 程 序 ( 温 度 和 湿 度 数 据 ) 和 登 录 网 站 (ThingWorx Composer) 的 用 户 生 成 应 用 程 序 键 的 步 骤 : 前 往 ThingWorx Composer 在 左 侧 窗 格, 有 以 下 菜 单 : Modeling Visualization Data Storage Collaboration Security 和 System 选 择 Security 的 下 拉 菜 单 : 在 Security 下, 鼠 标 悬 停 在 Application Keys 上, 点 击 绿 色 加 加 号 : 在 Name 部 分 输 入 您 自 己 的 名 称 ; 请 确 保 遵 循 命 名 规 则, 请 在 本 书 后 面 查 看 指 南 在 标 记 部 分, 单 击 该 魔 法 棒, 选 择, 然 后 使 用 Applications 词 汇, 在 New Term 字 段 中, 输 入 您 的 标 签 名 称 ( 通 常 是 与 项 目 相 关 的, 例 如 TempHumidityProject): Server) PTC 11
完 成 后, 点 击 Add Term 最 后, 在 User Name Reference 字 段 中 再 次 单 击 魔 法 棒 列 表 中 选 择 您 自 己, 当 您 完 成 后, 界 面 应 如 下 图 所 示 :, 以 填 充 该 字 段, 从 用 户 而 后, 进 入 页 面 的 顶 部 并 点 击 你 会 注 意 到 在 keyed 栏 中 有 一 系 列 字 母 和 数 字, 这 是 您 生 成 应 用 程 序 键 : 注 : 当 创 建 Application key 时, 按 照 本 教 程, 确 保 在 用 户 名 参 考 处 选 择 与 您 登 录 到 ThingWorx 时 相 同 的 名 字 否 则 Thingworx java SDK 程 序 发 送 的 数 据 无 法 被 Thingworx 接 收 远 程 物 体 可 能 显 示 为 在 线, 但 温 湿 度 属 性 的 数 据 不 会 显 示 出 来, 也 没 有 消 息 让 您 可 知 道 什 么 造 成 这 种 情 况 4. 接 下 来, 编 辑 项 目 主 路 径 下 的 pom.xml 文 件 在 属 性 下 更 新 为 您 想 要 复 制 jar 到 的 位 置 的 URL Server) PTC 12
接 下 来 在 您 的 计 算 机 命 令 行 运 行 : mvn deploy 这 将 自 动 地 传 输 jar 到 PI 第 五 部 分 : 运 行 实 例 以 下 命 令 将 启 动 您 目 标 路 径 的 边 缘 服 务 器 : 在 您 树 莓 派 的 命 令 行 : java -jar./temperature-thing-jar-with-dependencies.jar <ThingWorx Server URL> <Application Key><Optional Simulated> 在 Windows 的 命 令 行 : java -jar temperature-thing-jar-with-dependencies.jar <ThingWorx Server URL> <Application Key><Optional Simulated> 注 : 当 在 PC 上 运 行 jar 时, 确 保 在 temperature-thing/target 路 径 下 运 行 命 令,jar 文 件 位 于 该 路 径 下 您 也 可 以 使 用 仿 真 (simulate) 选 项, 因 为 没 有 连 接 到 你 的 PC 的 传 感 器 来 读 数 据 要 停 止 运 行 应 用, 在 命 令 行 输 入 CTRL+C 对 于 每 个 人, 启 动 实 例 所 需 的 参 数 是 不 同 的 接 下 来 就 是 您 如 何 确 定 他 们 <ThingWorx Server URL> 如 果 您 的 ThingWorx 服 务 器 位 于 https://maker01.ptcmanaged.com/thingworx, 那 么 您 的 服 务 器 URL 将 是 wss://maker01.ptcmanaged.com:443/thingworx/ws 如 果 您 不 使 用 https, 那 么 wss 应 改 为 ws, 端 口 改 为 80 <Application Key> 一 个 应 用 程 序 键 是 一 个 字 符 串, 边 缘 客 户 可 以 用 来 登 录 而 不 需 要 用 户 名 和 密 码 您 则 必 须 登 录 到 ThingWorx 创 建 一 个 应 用 程 序 键 Server) PTC 13
1. 从 主 页 的 标 签 里, 找 到 Application Key, 然 后 点 击 + 按 钮 2. 创 建 一 个 类 似 于 temperaturethingkey 的 键, 标 记 并 保 存 它 保 存 后 复 制 生 成 的 键 值, 将 其 用 于 此 参 数 <Optional Simulated> 如 果 提 供 了 第 三 个 参 数, 即 simulated 的 话, 那 么 就 不 需 要 硬 件 来 运 行 这 个 例 子 它 将 使 用 随 机 产 生 的 温 度 和 湿 度 值 这 是 个 命 令 例 子 : java-jar./temperature-thing-jar-with-dependencies.jar wss://maker01.ptcmanaged.com:443/thingworx/ws 7c73215e-ff40-47ee-9c18-d29a0c5310e0 simulated 这 将 使 用 模 拟 的 数 据 来 启 动 实 例 运 行 jar 文 件 时 的 故 障 排 查 信 息 : 当 运 行 jar 文 件 时, 可 能 会 发 生 温 湿 度 值 的 错 误 解 析 请 您 确 保 按 如 下 图 片 中 所 示 的 设 置 您 的 语 言 和 区 域 选 项 在 Windows OS 中 要 查 看 区 域 和 语 言 窗 口, 在 开 始 菜 单 的 搜 索 栏 中 输 入 区 域 和 语 言 点 击 附 加 设 置, 如 下 图 所 示 的 第 二 窗 口 已 打 开 Server) PTC 14
参 考 命 名 规 则 : 1) 名 称 必 须 以 字 母 美 元 符 号 $ 或 下 划 线 字 符 _ 开 头 ; 2) 在 名 称 中 没 有 空 格, 即 Temperature Sensor 是 不 正 确 的 ; 3) 首 字 符 后, 字 母 数 字 美 元 符 号 和 下 划 线 均 可 4) 良 好 的 命 名 方 式 包 括 : 一 个 单 词 命 名 时 全 部 使 用 小 写 字 母 ; 对 于 多 单 词 的 名 字, 第 一 个 单 词 全 为 小 写 字 母, 后 面 的 单 词 首 子 母 大 写 例 如 temperaturesensorthingshape 是 一 个 较 好 的 名 字, Server) PTC 15
2015 PTC Inc. The information contained herein is provided for informational use and is subject to change without notice. The only warranties for PTC products and services are set forth in the express warranty statements accompanying such products and services and nothing herein should be construed as constituting an additional warranty. PTC shall not be liable for technical or editorial errors or omissions contained herein. Important Copyright, Trademark, Patent, and Licensing Information: See the About Box, or copyright notice, of your PTC software. 01012015 Server) PTC 16