文本, 我会使用一个Elixir实现的模块函数去读取连接到树莓派的DS18B20温度传感器的温度数值.

文本假设你熟悉

  • 数字电路基础

  • Elixir编程基础

视频演示

原料

树莓派3, B型(图片省略, 下文有)

DS18B20传感器

t02

4.7KΩ 电阻(一分钱一颗)

img_1633

面包板(图片省略, 下文有)

公母头杜邦线

img_1634

连接温度传感器

接线图

ds18b201

面包板内部连通图

breadboard-connections

面包板接线图

img_1627

  • 黑色为地线

  • 红色为3.3V板供直流电源, 对应PIN1

  • 黄色为数据线

  • 电阻连接在红色和黄色线之间

img_1628

树莓派主板接线

  • 左侧三根是连接到电脑的串口线, 用于控制台输入输出.

  • 右侧为DS18B20传感器的三个引脚

img_1629

全体照

img_1630

创建一个新的Elixir Nerves项目

mix nerves.new hello_celsius_sensor --target rpi3
cd hello_celsius_sensor
mix deps.get

启用线路协议支持

下面的过程和描述和覆盖启动分区中的文件相关

修改 config/config.exs, 包含如下内容:

use Mix.Config

# 日志
config :logger, :console,
  level: :debug,
  format: "$date $time $metadata[$level] $message\n",
  handle_sasl_reports: true,
  handle_otp_reports: true,
  utc_log: true

# 覆盖
config :nerves, :firmware,
  rootfs_additions: "config/rootfs-additions"

# 固件配置
config :nerves, :firmware,
  fwup_conf: "config/rpi/fwup.conf"

创建 rootfs-additions 目录

mkdir -p config/rootsfs-additions/etc
cd config/rootsfs-additions/etc
vi erlinit.config

添加如下内容:

# Additional configuration for erlinit

# Turn on the debug prints
# -v

# Specify the UART port that the shell should use.
#-c tty1
-c ttyS0

# If more than one tty are available, always warn if the user is looking at
# the wrong one.
--warn-unused-tty

# Use dtach to capture the iex session so that it can be redirected
# to the app's GUI
#-s "/usr/bin/dtach -N /tmp/iex_prompt"

# Specify the user and group IDs for the Erlang VM
#--uid 100
#--gid 200

# Uncomment to hang the board rather than rebooting when Erlang exits
# --hang-on-exit

# Optionally run a program if the Erlang VM exits
#--run-on-exit /bin/sh

# Enable UTF-8 filename handling in Erlang and custom inet configuration
-e LANG=en_US.UTF-8;LANGUAGE=en;ERL_INETRC=/etc/erl_inetrc

# Mount the application partition
# See http://www.linuxfromscratch.org/lfs/view/6.3/chapter08/fstab.html about
# ignoring warning the Linux kernel warning about using UTF8 with vfat.
-m /dev/mmcblk0p3:/root:vfat::

# Erlang release search path
-r /srv/erlang

# Assign a unique hostname based on the board id
-d "/usr/bin/boardid -b rpi -n 4"
-n nerves-%.4s

注意-c 参数设置为 ttyS0 是为了能够通过开发电脑查看到树莓派的输出信息, 请参考使用 Elixir 开发嵌入式系统: 串口调试

cp deps/rpi3/nerves_system_rpi3/fwup.conf config

修改 file-resource config.txt 的位置, 其中 NERVES_APP 为当前项目的根目录.

file-resource config.txt {
    host-path = "${NERVES_APP}/config/rpi/config.txt"
}

复制 config.txt 文件.

cp deps/rpi3/nerves_system_rpi3/config.txt config/rpi

DS18B20 使用 Dallas 1-Wire protocol 协议. Nerves 提供了对 1-Wire 协议的支持, 只需要在 config.txt 配置文件激活这个参数即可.

t06

代码库

参考资料


developerworks
1.7k 声望266 粉丝