OrangePi zero3 连接温度传感器

 

阅读门槛:需要了解一些香橙派开发板的基础知识(可以去看看我之前的文章有介绍),linux系统的相关知识,并且会看基本的python代码,我的机子烧录的系统是 Ubuntu22,其它系统的话可以作为参考。

简介

本文主要记录通过 orangePi(香橙派)连接温度传感器,并用Python 脚本最终实现温度监控的过程。主要是其间有不少坑,我也算是提前踩了,希望对你们有用。

前期准备

  1. orangePI zero 3(其它的板子也行)

  2. 面包板

  3. Ds18b20 温度传感器

  4. 小灯珠(可选)

操作流程

1. 线路连接

首先我们需要知道开发板的每个pin针脚代表的意思。可以参考我之前的介绍orangePI的文章。

当知道原理的情况下,连接起来就很简单。

我们需要知道的是温度传感器上有三个引脚,分别对应的:

  1. 红色:电源(我接的是5v电压,由于温度传感器可以支持3.3v - 5.5v电压,所以 3v 电压引脚也是可以的)

  2. 灰色:地线

  3. 绿色:数据传输(理论上只要是gpio的口都可以,我这里连接的是pin12引脚)

连接原理图参考如下:

温度传感器连接图

我这里用了额外的连接线方便用小灯珠调试,实际操作过程中这个额外的连接杜邦线可以不用,按照上面的连接原理形成一个电路闭环即可,实物连接图如下:

connect_pic

线连接好,基本上已经成功一半了。接下来就是代码的编写了。

2. 安装环境依赖

这里我用到了一个依赖包 wiringpi,默认情况下香橙派是自带的,这个步骤就可以跳过。

如果系统没有的话也可以自己安装一下,步骤也很简单(以下步骤需要在root权限下运行)

一、安装依赖包
root@orangepi:~# sudo apt-get update
root@orangepi:~# sudo apt-get -y install git swig python3-dev python3-setuptools
二、下载 wiringOP-Python 的源码

注意,下面的 git clone**--recursive** 命令会自动下载 wiringOP 的源码,因为wiringOP-Python 是依赖 wiringOP 的。请确保下载过程没有因为网络问题而报错。

root@orangepi:~# git clone --recursive https://github.com/orangepi-xunlong/wiringOP-Python -b next root@orangepi:~# cd wiringOP-Python
root@orangepi:~/wiringOP-Python# git submodule update --init --remote
三、编译 wiringOP-Python
root@orangepi:~# cd wiringOP-Python
root@orangepi:~/wiringOP-Python# python3 generate-bindings.py > bindings.i root@orangepi:~/wiringOP-Python# sudo python3 setup.py install
四、查看安装是否成功

当提示下面的内容,则表示安装成功了!

root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; help(wiringpi)" Help on module wiringpi:
NAME wiringpi
DESCRIPTION
# This file was automatically generated by SWIG (http://www.swig.org).
# Version 4.0.2
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
...

3. 代码编写

创建一个脚本叫:index.py,参考以下代码:

# index.py
import wiringpi
from wiringpi import GPIO
import time
​
PIN = 6  # 这里对应的是物理针脚 12号
​
def oneWireReset(pin):
  wiringpi.pinMode(pin, GPIO.OUTPUT)
  wiringpi.digitalWrite(pin, GPIO.HIGH)
  wiringpi.digitalWrite(pin, GPIO.LOW)
  wiringpi.delayMicroseconds(500)
  wiringpi.digitalWrite(pin, GPIO.HIGH)
  wiringpi.delayMicroseconds(60)
  wiringpi.pinMode(pin, GPIO.INPUT)
  if not wiringpi.digitalRead(pin):
    ack = 1
  else:
    ack = 0
  wiringpi.delayMicroseconds(500)
  return ack
  
def writeBit(pin, bit):
  wiringpi.pinMode(pin, GPIO.OUTPUT)
  wiringpi.digitalWrite(pin, GPIO.LOW)
  wiringpi.delayMicroseconds(2)
  wiringpi.digitalWrite(pin, bit)
  wiringpi.delayMicroseconds(80)
  wiringpi.digitalWrite(pin, GPIO.HIGH)
  wiringpi.delayMicroseconds(1)
​
def oneWireSendComm(pin, byte):
  i = 0
  while i < 8:
    sta = byte & 0x01
    writeBit(pin, sta)
    byte >>= 1
    i += 1
​
def readBit(pin):
  wiringpi.pinMode(pin, GPIO.OUTPUT)
  wiringpi.digitalWrite(pin, GPIO.HIGH)
  wiringpi.digitalWrite(pin, GPIO.LOW)
  wiringpi.delayMicroseconds(2)
  wiringpi.digitalWrite(pin, GPIO.HIGH)
  
  wiringpi.pinMode(pin, GPIO.INPUT)
  wiringpi.delayMicroseconds(2)
​
  tmp = wiringpi.digitalRead(pin)
  wiringpi.delayMicroseconds(40)
  return tmp
​
def oneWireReceive(pin):
  i = 0
  k = 0
  while i < 8:
    j = readBit(pin)
    k = (j << 7) | (k >> 1)
    i += 1
  k = k & 0x00FF
  return k
​
def tempchange(lsb, msb):
  if (msb >= 0xF0):
    msb = 255 - msb
    lsb = 256 - lsb
    tem = -(msb*16*16 + lsb)
  else:
    tem = (msb*16*16 + lsb)
  temp = tem*0.0625
  print("Current Temprature: %.2f"%(temp))
​
def main():
  wiringpi.wiringPiSetup()
  lsb = 0
  msb = 0
  if oneWireReset(PIN):
    oneWireSendComm(PIN, 0xcc)
    oneWireSendComm(PIN, 0x44)
  if oneWireReset(PIN):
    oneWireSendComm(PIN, 0xcc)
    oneWireSendComm(PIN, 0xbe)
    lsb = oneWireReceive(PIN)
    msb = oneWireReceive(PIN)
  tempchange(lsb, msb)
​
if __name__ == '__main__':
  while True:       # 创建一个循环,两秒钟输出一次温度信息
    main()
    time.sleep(2)
​

4. 结果展示

运行脚本:python index.py, 就会有当前实时温度信息展示

Oct-09-2024 17-44-50

小结

随着对开发板的日渐熟悉,我越来越坚定认为软件硬件都是服务于人的。如果生活中不能满足你的需求,每个人都可以通过自己DIY来实现自己的一些小想法。而目前来看这需要的成本是非常低的,并且成就感满满,让自己快乐其实很简单。

本期分享就到这了,以后我会陆续分享关于 硬件+软件 联动的案例,最终目标是自己部署一个大模型,制作一个自己的AI机器人,下次见 👋

全网首发:dev的艺术空间

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值