乐鑫技术交流
直播中

李勇俊

7年用户 1453经验值
私信 关注
[问答]

Arduino IDE与Blynk示例的编译器错误怎么解决?

Arduino IDE:1.6.5
Blynk 库:0.3.1
板设置:通用 ESP8266 模块演示示例
:BlynkBlink
硬件:ESP8266-12
例如,当我编译 BlynkBlink 时,这是编译器错误消息:
D:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp: In member function 'int EthernetClass::begin(uint8_t*)':
D:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp:19:45: 错误:没有匹配函数来调用'SPIClass::beginTransaction(int, SPISettings)' SPI.beginTransaction(SPI_ETHERNET_SETTINGS
   ) ;

回帖(1)

张飞雄

2024-5-24 17:05:54
这个错误是因为在使用 ESP8266 时,SPI.beginTransaction() 函数需要传入第二个 SPISettings 参数。解决方法如下:

1. 打开 Blynk 库所在的文件夹(通常在 Arduino/libraries/Blynk),找到文件 BlynkSimpleEsp8266.h。

2. 打开该文件并找到以下代码块:

```
#if defined(ESP8266)
    class AuthTokenProvider {
    public:
        AuthTokenProvider(const char* auth) : _auth(auth) {}
        void get(char* buff) { strcpy(buff, _auth); }
    private:
        const char* _auth;
    };
    typedef BlynkWifi BlynkTransport;
#else
    typedef BlynkEthernet BlynkTransport;
#endif
```

3. 在 #if defined(ESP8266) 和 #else 之间添加以下代码:

```
#include
```

4. 找到以下代码行:

```
SPI.begin();
```

5. 将该行代码替换为以下代码:

```
SPI.begin(14, 12, 13, 15); //Set the pins used for ESP8266 SPI Interface
```

6. 打开文件 Adafruit_MCP3008.h,通常在 Arduino/libraries/Adafruit_MCP3008 目录中。

7. 找到以下代码块:

```
#if defined(SPI_HAS_TRANSACTION)
  void beginTransaction(SPISettings settings);
  void endTransaction(void);
#endif
  void setBitOrder(uint8_t);
  void setDataMode(uint8_t);
  void setClockDivider(uint8_t);
```

8. 在 #if defined(SPI_HAS_TRANSACTION) 和 #endif 之间添加以下代码:

```
#if defined(ESP8266)
  void beginTransaction(SPISettings settings);
#endif
```

9. 打开文件 Adafruit_MCP3008.cpp,通常在 Arduino/libraries/Adafruit_MCP3008 目录中。

10. 找到以下代码块:

```
#if defined(SPI_HAS_TRANSACTION)
void Adafruit_MCP3008::beginTransaction(SPISettings settings) {
  SPI.beginTransaction(settings);
}
void Adafruit_MCP3008::endTransaction(void) {
  SPI.endTransaction();
}
#endif
```

11. 在 #if defined(SPI_HAS_TRANSACTION) 和 #endif 之间添加以下代码:

```
#if defined(ESP8266)
void Adafruit_MCP3008::beginTransaction(SPISettings settings) {
  SPI.beginTransaction(settings);
}
#endif
```

12. 保存文件并重新编译 BlynkBlink 示例。

如果仍然存在编译器错误,请尝试升级到较新版本的 Arduino IDE 和 Blynk 库。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分