使用 Elixir 開發嵌入式系統: 使用DS18B20傳感器測量體溫

文本, 我會使用一個Elixir實現的模塊函數去讀取鏈接到樹莓派的DS18B20溫度傳感器的溫度數值.html

文本假設你熟悉linux

  • 數字電路基礎git

  • Elixir編程基礎github

視頻演示

原料

樹莓派3, B型(圖片省略, 下文有)編程

DS18B20傳感器segmentfault

t02

4.7KΩ 電阻(一分錢一顆)session

img_1633

麪包板(圖片省略, 下文有)app

公母頭杜邦線函數

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

代碼庫

參考資料

相關文章
相關標籤/搜索