jjzjj

c# - 树莓派 2 和 BMP280 : Slave address was not acknowledged

coder 2024-06-04 原文

我在 https://www.hackster.io 上关注项目 WeatherStation Windows物联网。
我在 github 上下载了项目,并在 Raspberry 上连接了我的 BMP280 传感器。
你可以在

上查看我的连接

对我来说,这是正确的,但我有一个异常(exception) bmp280.WriteRead(WriteBuffer, ReadBuffer);

System.IO.FileNotFoundException: The system cannot find the file specified. Slave address was not acknowledged.

最佳答案

这个问题有几个不同的原因,其中大部分与硬件有关。

我看到您正在使用 Adafruit 分线板,并将基于此引用引脚。

  1. 确保您的 SDO 和 SCL 线正确连接到您的 Raspberry PI。 SDO 应连接到引脚 3,SCL 应连接到引脚 5。从您的图表图片来看,这应该是正确的。

  2. 接下来是 Vin。 Hackster.io 上的 Fritzing 图像不正确。 Vin 应该连接到你的 3.3V 线,PI 上的引脚 1。

    This is because Vin is the supply level of your logic signal. In this case the Raspberry PI is 3.3V, putting it at 5 can cause issues where data is not properly clocked in via I2C.

  3. 最后,通过将 SDO 连接到 V3.3 来将其拉高。

    The reason for this is if you read the datasheet for the BMP280/BME280 and look at the schematic you will see SDO has a pullup resistor that pulls it to 3.3V it's internal logic level. This is going to be exceptionally weird if using 5v rails as you're not technically in a tristate neither low nor hi so you will probably end up with a random address.

    Pulling this to 0V via ground will cause the slave address to be 0x76. With it pulled high the slave address of the BMP280/BME280 sensor will be 0x77. From looking at their supplied code they expect this pin to be pulled high giving a 0x77 address.

#3 的替代软件解决方案是更改 BME280 设备代码中的 I2C 从设备地址。在示例代码中,它包含在 Lesson_203\StartSolution\BMP280.cs 中:

class BMP280
{
    //The BMP280 register addresses according the the datasheet: http://www.adafruit.com/datasheets/BST-BMP280-DS001-11.pdf
    const byte BMP280_Address = 0x77;  //If SDI is pulled high 0x77, if pulled low 0x76
    const byte BMP280_Signature = 0x58;

最后,如果您从顶部看 pi 时 HDMI 端口指向您,而 SD 卡插槽在左侧,您对 Pi 上的引脚连接感兴趣,那么您对 ​​40 针接头的最左边的引脚感兴趣.

5V | 5V |地面
3.3V | SDA(SDI) |时钟信号

另请参阅此标题图。 Pi3 Header Map

关于c# - 树莓派 2 和 BMP280 : Slave address was not acknowledged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35368372/

有关c# - 树莓派 2 和 BMP280 : Slave address was not acknowledged的更多相关文章

  1. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  2. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  3. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  4. c# - C# 中的 Flatten Ruby 方法 - 2

    我如何做Ruby方法"Flatten"RubyMethod在C#中。此方法将锯齿状数组展平为一维数组。例如:s=[1,2,3]#=>[1,2,3]t=[4,5,6,[7,8]]#=>[4,5,6,[7,8]]a=[s,t,9,10]#=>[[1,2,3],[4,5,6,[7,8]],9,10]a.flatten#=>[1,2,3,4,5,6,7,8,9,10 最佳答案 递归解决方案:IEnumerableFlatten(IEnumerablearray){foreach(variteminarray){if(itemisIEnume

  5. ruby - 可以像在 C# 中使用#region 一样在 Ruby 中使用 begin/end 吗? - 2

    我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用

  6. c# - Ruby 等效于 C# Linq 聚合方法 - 2

    什么是Linq聚合方法的ruby​​等价物。它的工作原理是这样的varfactorial=new[]{1,2,3,4,5}.Aggregate((acc,i)=>acc*i);每次将数组序列中的值传递给lambda时,变量acc都会累积。 最佳答案 这在数学以及几乎所有编程语言中通常称为折叠。它是更普遍的变形概念的一个实例。Ruby从Smalltalk中继承了这个特性的名称,它被称为inject:into:(像aCollectioninject:aStartValueinto:aBlock一样使用。)所以,在Ruby中,它称为inj

  7. c# - 先学什么? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion几年前我去学校学习编程,毕业后我找到了一份系统管理方面的工作,这就是我职业生涯的方向。我想重新开始某种开发,并且一直在“玩”C#和ASP.NET,但我已经听到很多关于其他"new"语言的讨论(新的意思是它们是新的)我)喜欢Ruby和F#。我想我想知道我是否在浪费时间学习主要的MS语言,而不是成为一名通才。很长一段时间没有离开开发社区(如果我曾经离开过的话)让我在潮流中挣扎,我不想落在时代的

  8. c# - 在 C# 中重现 Ruby OpenSSL private_encrypt 输出 - 2

    我有一个简单的Ruby脚本,我用它在某些HTTPheader上执行private_encrypt以签署要发送到ruby​​RESTAPI的Web请求,该API会根据Base64编码字符串测试Base64编码字符串生成而不是解码Base64和解密数据然后测试原始字符串。我使用的脚本是require"openssl"require"base64"path_to_cert=ARGV[0].dupplain_text=Base64.decode64(ARGV[1].dup)private_key=OpenSSL::PKey::RSA.new(File.read(path_to_cert))pu

  9. C# 的 LINQ 用于在 ruby​​ 中等效的集合操作 - 2

    我是ruby​​开发的新手,我目前正在使用rails2.3.11在ruby​​1.8.7中开发一个项目,我想知道这种语言是否有与C#的linq等效的集合操作,例如where子句。谢谢。 最佳答案 Ruby中Linq的where等价于find_all检查documentationfortheEnumerableModule用于其他功能。 关于C#的LINQ用于在ruby​​中等效的集合操作,我们在StackOverflow上找到一个类似的问题: https://

  10. c# - 将 Ruby 的时间转换为 C# - 2

    我正在尝试转换Ruby的time到C#,但我现在卡住了。这是我的尝试:publicstaticclassExtensions{publicstaticvoidTimes(thisInt32times,WhatGoesHere?){for(inti=0;i我是C#的新手,也许这个应该很简单,而且我知道我想使用Extensionmethods。但由于函数在C#中不是“第一类”,我现在被卡住了。那么,我应该为WhatGoesHere使用什么参数类型? 最佳答案 您可以使用Action输入:publicstaticclassExtensio

随机推荐