Read value from DS18B20 temperature sensor in nerves running on raspberry pi 3 model B
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
lib
rel
test
.gitignore
README.md
mix.exs
mix.lock

README.md

文本, 我会使用一个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

代码库

参考资料