温度传感器WSTP11A-RPI使用教程

使用说明

本例程使用树莓派双通道隔离型RS485扩展板(需要自行购买)为例,详细的使用方法参考2-CH_RS485_HAT_WIKI

硬件连接

赫斯曼接口连接方式
1接V+(12V~36V)
2接A(Change 2)
3接V-(GND)
4(Gnd.png)接B(Change 2)


功能引脚树莓派接口(BCM)描述
VCC5V3.3V/5V电源正
GNDGND电源地
SCLKP21(SPI1 SCLK)SPI时钟输入
MOSIP20(SPI1 MOSI)SPI数据输入
MISOP19(SPI1 MISO)SPI数据输出
CSP18(SPI1 CS)SPI片选信号
IRQP24中断输出
EN1P27通道1(Channel 1)收发使能: 高电平发送使能,低电平接收使能
EN2P22通道2(Channel 2)收发使能: 高电平发送使能,低电平接收使能

添加驱动

  • 在终端执行:
  1. sudo nano /boot/config.txt
  2. #加入如下,int_pin根据实际焊接方式设置:
  3. dtoverlay=sc16is752-spi1,int_pin=24
  4. #重启设备
  5. sudo reboot

重启后,SC16IS752的驱动会加载到系统内核中,此时可以运行ls /dev查看一下 将会多出如下设备: 


在2020-05-27的树莓派系统中gpiochip3没有了变成了gpiochip2

安装库

  • 安装wiringPi
  1. sudo apt-get install wiringpi
  2. #对于树莓派4B可能需要进行升级;
  3. cd /tmp
  4. wget https://project-downloads.drogon.net/wiringpi-latest.deb
  5. sudo dpkg -i wiringpi-latest.deb
  6. gpio -v
  7. # 运行 gpio -v 会出现2.52版本,如果没有出现说明安装出错
  • 安装python2库
  1. sudo apt-get update
  2. sudo apt-get install python-pip
  3. sudo pip install RPi.GPIO
  4. sudo apt-get install python-serial
  5. sudo apt-get install python-crcmod
  • 安装python3库
  1. sudo apt-get update
  2. sudo apt-get install python3-pip
  3. sudo pip3 install RPi.GPIO
  4. sudo apt-get install python3-serial
  5. sudo apt-get install python3-crcmod

测试

  • 下载并运行测试例程
  1. sudo apt-get install p7zip-full
  2. sudo wget https://www.waveshare.net/w/upload/1/14/WSTP11A_Code.7z
  3. sudo 7z x WSTP11A_Code.7z
  4. sudo chmod 777 -R WSTP11A_Code
  5. cd WSTP11A_Code/
  • C程序
  1. cd c
  2. make clean
  3. make
  4. sudo ./main
  • python程序
  1. #python2
  2. cd python
  3. cd examples
  4. sudo python main.py
  5. #python3
  6. cd python
  7. cd examples
  8. sudo python3 main.py

程序详解

  1. 示例程序运行在只有一个变送器连接上时,通过获取变送器地址、读取温度数据、设置地址加一


  • C语言函数详解
  1. #当只有一个设备连接上RS485总线,获取当前设备地址
  2. uint8_t WSTP11A_get_addr(void)
  3. #将指点地址的设备修改到新地址
  4. uint8_t WSTP11A_set_addr(uint8_t o_addr, uint8_t n_addr)
  5. #获取指定地址的设备的数据信息
  6. float WSTP11A_get_temp(uint8_t addr)
  • python函数详解
  1. #通过字符队列获取16位CRC校验
  2. def crc16Add(self,read):
  3. #当只有一个设备连接上RS485总线,获取当前设备地址
  4. def get_addr(self):
  5. #获取指定地址的设备的数据信息
  6. def get_temp(self,addr):
  7. #将指点地址的设备修改到新地址
  8. def set_addr(self,o_addr,s_addr):