向哈勃族的所有居民致以问候!
我想谈一谈通过I2C总线连接多个HTU21传感器而无需使用其他芯片的新方法。
该传感器在各种DIY大师中仍然很流行,它是实至名归的:它比以前的传感器更精确,尺寸更小(便于嵌入设备)。
最近,我和许多用户一样,由于缺乏更改此传感器地址的能力而感到困惑。 当然,谷歌发布了许多有关I2C总线的各种多路复用器的文章,从“在中国著名的在线商店购买”到“自己动手”。 没有烙铁和其他费用,没有其他选择。 这不能不让人沮丧,因为有必要在此刻解决问题(客户就是这种客户)。 我想谈谈一种更轻松,更轻松,非常简单的方法来解决这种情况。 感兴趣吗? 那我告诉你。
初始数据:Arduino mega和4个传感器HTU21。
任务:有必要通过I2C总线连接所有htu传感器并读取值。 而且,这些传感器并不是总线上唯一的从属设备(该计划还包括LCD屏幕和其他传感器)。
我们知道什么 HTU21传感器在总线上具有固定地址-0x40 1 。 在总线上具有一个具有相同地址的微控制器和4个传感器,如何在不使用额外芯片的情况下访问特定设备?
事实证明一切都很简单:
- 照常连接地面,scl和sda(不要忘记数据线和同步的上拉电阻);
- 我们将每个传感器的电源线连接到Arduino上的数字输入(您可能已经知道我要领导的方向)
- 将HIGH交替施加到为单独传感器供电的每个数字输入,并在延迟后从通电的传感器读取该值。
- 给该传感器一个低电平信号,并为其他传感器重复该循环。
当然,该方法也有缺点,例如,可能根本无法获得所需数量的免费数字或模拟输出。 但是对于项目中的使用,此原理有效,并且与微控制器之间的距离足够远。 希望本文能帮助您节省神经,金钱和时间。
难怪有人说一切都很简单!
附件清单:
/* , HTU21 BME280 */ void greenhouseHT() { delay(30); rooms[3].TempA = bme.readTemperature(); delay(30); rooms[3].HumA = bme.readHumidity(); delay(30); for (int i=0; i<3; i++) { digitalWrite(HTU21_pins[i], HIGH); delay(30); rooms[i].HumA = myGreenhouseHumidity.readHumidity(); rooms[i].TempA = myGreenhouseHumidity.readTemperature(); delay(30); digitalWrite(HTU21_pins[i], LOW); delay(30); } digitalWrite(pin_HTU21_1, HIGH); }