🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

3回答

15638閲覧

Arduino ボードESP32 Dev Moduleに対するコンパイル時にエラーが発生しました

raspypy

総合スコア247

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2021/04/06 00:51

##困っていること
Arduino IDE (Windows10 PC)にて,ESP32に書き込むプログラムのコンパイルをしています.
プログラムと,ヘッダーファイルを末尾に添付します.

このプログラムをコンパイルすると,次のエラーが出てきてしまいます.
原因が分からずこまっています.

text

1sketch\Test3.ino.cpp.o:(.literal._Z5setupv+0x14): undefined reference to `ESP32_BME280_I2C::ESP32_BME280_I2C_Init(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)' 2 3sketch\Test3.ino.cpp.o:(.literal.startup._GLOBAL__sub_I_bme280i2c+0x8): undefined reference to `ESP32_BME280_I2C::ESP32_BME280_I2C(unsigned char, unsigned char, unsigned char, unsigned int)' 4 5sketch\Test3.ino.cpp.o:(.literal._Z7bme_getv+0x1c): undefined reference to `ESP32_BME280_I2C::Read_All(double*, double*, double*)' 6 7sketch\Test3.ino.cpp.o: In function `setup()': 8 9C:\Users\PLC\Documents\Arduino\Program\Test3\Test3/Test3.ino:48: undefined reference to `ESP32_BME280_I2C::ESP32_BME280_I2C_Init(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)' 10 11sketch\Test3.ino.cpp.o: In function `_GLOBAL__sub_I_bme280i2c': 12 13C:\Users\PLC\Documents\Arduino\Program\Test3\Test3/Test3.ino:48: undefined reference to `ESP32_BME280_I2C::ESP32_BME280_I2C(unsigned char, unsigned char, unsigned char, unsigned int)' 14 15sketch\Test3.ino.cpp.o: In function `bme_get()': 16 17C:\Users\PLC\Documents\Arduino\Program\Test3\Test3/Test3.ino:35: undefined reference to `ESP32_BME280_I2C::Read_All(double*, double*, double*)' 18 19collect2.exe: error: ld returned 1 exit status 20 21exit status 1 22 23ボードESP32 Dev Moduleに対するコンパイル時にエラーが発生しました。 24

##プログラム

c++

1#include "ESP32_BME280_I2C.h" 2 3const uint8_t Address = 0x76; 4const uint8_t sda = 12; 5const uint8_t scl = 14; 6const uint32_t frequency = 30000; 7 8ESP32_BME280_I2C bme280i2c(Address, scl, sda, frequency); 9 10void setup(){ 11 Serial.begin(115200); 12 delay(1000); //Take some time to open up the Serial Monitor 13 14 //Example Indoor navigation 15 uint8_t t_sb = 0; //stanby 0.5ms 16 uint8_t filter = 4; //IIR filter = 16 17 uint8_t osrs_t = 2; //OverSampling Temperature x2 18 uint8_t osrs_p = 5; //OverSampling Pressure x16 19 uint8_t osrs_h = 1; //OverSampling Humidity x1 20 uint8_t Mode = 3; //Normal mode 21 22 bme280i2c.ESP32_BME280_I2C_Init(t_sb, filter, osrs_t, osrs_p, osrs_h, Mode); 23 delay(1000); 24} 25 26void loop(){ 27 bme_get(); 28 delay(5000); 29} 30 31//************** BME280 measure ************************* 32void bme_get(){ 33 double temperature, pressure, humidity; 34 35 bme280i2c.Read_All(&temperature, &pressure, &humidity); 36 37 char temp_c[10], hum_c[10], pres_c[10]; 38 sprintf(temp_c, "%2.2lf", temperature); 39 sprintf(hum_c, "%2.2lf", humidity); 40 sprintf(pres_c, "%4.2lf", pressure); 41 42 Serial.println("-----------------------"); 43 Serial.print("Temperature = "); Serial.println(temp_c); 44 Serial.print("Humidity = "); Serial.println(hum_c); 45 Serial.print("Pressure = "); Serial.println(pres_c); 46 Serial.println("-----------------------"); 47 Serial.flush(); 48}

##Header

c++

1/* 2 ESP32_BME280_I2C.h - for Arduino core for ESP32 3 Beta version 1.2 4 5License MIT [Modified person is Mgo-tec.] 6Reference SWITCH SCIENCE page URL: 7http://trac.switch-science.com/wiki/BME280 8Reference library: 9https://github.com/adafruit/Adafruit_BME280_Library 10Original License is BSD [Copyright (c) 2012, Adafruit Industries] 11BSD License: 12Redistribution and use in source and binary forms, with or without 13modification, are permitted provided that the following conditions are met: 141. Redistributions of source code must retain the above copyright 15notice, this list of conditions and the following disclaimer. 162. Redistributions in binary form must reproduce the above copyright 17notice, this list of conditions and the following disclaimer in the 18documentation and/or other materials provided with the distribution. 193. Neither the name of the copyright holders nor the 20names of its contributors may be used to endorse or promote products 21derived from this software without specific prior written permission. 22THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY 23EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 24WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 25DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY 26DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 27(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 29ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 31SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32*/ 33 34#ifndef ESP32_BME280_I2C_h_ 35#define ESP32_BME280_I2C_h_ 36 37#include "Arduino.h" 38#include "Wire.h" 39 40class ESP32_BME280_I2C 41{ 42public: 43 ESP32_BME280_I2C(uint8_t bme280_address, uint8_t scl, uint8_t sda, uint32_t freq); 44 45 void ESP32_BME280_I2C_Init(uint8_t Stanby_t, uint8_t filter, uint8_t overS_T, uint8_t overS_P, uint8_t overS_H, uint8_t mode); 46 void WriteRegister(uint8_t reg_address, uint8_t data); 47 void ReadCalibration(void); 48 double Read_Temperature(); 49 double Read_Pressure(); 50 double Read_Humidity(); 51 52 void Read_All(double *temp, double *press, double *hum); 53 double ReadAltitude(double SeaLevel_Pres, double pressure); 54 55 int32_t compensate_T(int32_t adc_T); 56 double compensate_T_double(int32_t adc_T); 57 58 uint32_t compensate_P(int32_t adc_P); 59 double compensate_P_double(int32_t adc_P); 60 61 uint32_t compensate_H(int32_t adc_H); 62 double compensate_H_double(int32_t adc_H); 63 64 uint16_t read16bit(uint8_t reg); 65 uint8_t read8bit(uint8_t reg); 66 67private: 68 uint8_t _bme280_addres; 69 uint8_t _scl, _sda; 70 uint32_t _freq; 71 72 int32_t _t_fine; 73 74 uint16_t _dig_T1; 75 int16_t _dig_T2; 76 int16_t _dig_T3; 77 78 uint16_t _dig_P1; 79 int16_t _dig_P2; 80 int16_t _dig_P3; 81 int16_t _dig_P4; 82 int16_t _dig_P5; 83 int16_t _dig_P6; 84 int16_t _dig_P7; 85 int16_t _dig_P8; 86 int16_t _dig_P9; 87 88 uint8_t _dig_H1; 89 int16_t _dig_H2; 90 uint8_t _dig_H3; 91 int16_t _dig_H4; 92 int16_t _dig_H5; 93 int8_t _dig_H6; 94}; 95 96#endif

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Arduino IDEのライブラリのインストールには、やり方にいくつかバリエーションはありますけれど、この場合

  • githubのプロジェクトページ の緑の[↓Code] のダウンロードボタンを押し、[Download ZIP]を選択してダウンロードする
  • Arduino IDEのメニュー[スケッチ]-[ライブラリをインクルード]-[.ZIP形式のライブラリをインストール...]でダイアログが出るのでダウンロードしたZIPファイルを選択、[開く]を押すとライブラリがインストールされる
  • スケッチからは#include <ESP32_BME280_I2C.h> ("ファイル名"ではなく<ファイル名>)としてライブラリの使用を指示する

とするのが適正かと思います。
ライブラリとして配布されているものはこのように一括してIDEに扱いを任せましょう。とくに事情がない限り、バラバラにして.hと.cppをスケッチと一緒に置いて...などといじくり回さないほうがよいと思います。

投稿2021/04/06 04:22

編集2021/04/06 04:24
thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ESP32_BME280_I2C.cpp
は、保存していますか?

投稿2021/04/06 02:04

herobo

総合スコア153

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2021/04/06 02:33

ご指摘のとおりでした..cppも保存しなければだめなのですね. ありがとうございました。
guest

0

出ているエラーは全て、関数が存在していない、というものです。
ESP32_BME280_I2C.h、に係るライブラリの指定が抜けていませんか

投稿2021/04/06 01:05

y_waiwai

総合スコア88030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2021/04/06 01:10

素人質問ですみません.ライブラリの指定とは,どこで確認すれば良いでしょうか.
y_waiwai

2021/04/06 01:13

そのESP32_BME280_I2C.hというのはどこから持ってきたもんなんでしょうか。
y_waiwai

2021/04/06 01:27

そこに使い方が書いてありませんか? それは見てませんが、ヘッダファイルだけじゃなく、そこにあるソースファイルやライブラリファイルもコンパイル対象に含める必要があると思いますが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問