0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用ArduinoIDE设置ESP32

454398 来源:工程师吴畏 2019-07-30 11:28 次阅读

材料清单

ESP32

AmbiMate MS4多传感器模块

面包板和跳线

USB连接器

Arduino IDE(软件)

什么是AmbiMate MS4?

AmbiMate传感器模块MS4系列集成了一套传感器,用于楼宇自动化和连接家庭应用到PCB组件上。它在即用型PCB组件上提供了一组专用传感器,可轻松集成到主机产品中。

传感器包括运动,光线,温度,湿度,VSO(挥发性有机化合物),CO2和声音检测。通过捕获VOC浓度来增加监测空气质量的能力。有许多MS4系列传感器可用 - 我建议您选择带有嵌入式麦克风的传感器来增强运动检测或者能够收听声音事件。

所有MS4系列传感器模块都可以灵活地共享一个通用的七位连接。这使得设计人员可以布置单个PCB封装,以适应生产中所有可用的传感器配置。

MS4应用

室内照明

能源管理

楼宇自动化

工作空间舒适度

区域环境控制

自动化

空气质量测量系统

MS4规范

在MS4版本1中-2314291-2有九个传感器用于:

运动(PIR)

温度

湿度

运动(PIR)

温度

声音(麦克风)

VOC

CO2

MS4 Pinout

将ESP32连接到MS4

按如下方式将MS4连接到ESP32:

使用Arduino IDE设置ESP32

按照下面的屏幕截图所示的步骤使用Arduino IDE对ESP32进行编程

单击文件》首选项

添加URL链接。您可以通过逗号分隔其他链接。

https://dl.espressif.com/dl/package_esp32_index.json

单击 确定 。

单击工具》板》板管理器

搜索 ESP32 并安装包。

再次转到 工具 并选择 ESP32板 和 COM端口

上传源代码

复制下面的源代码,将其粘贴到Arduino IDE中,然后上传。您可能需要在上传过程中长按ESP32板上的启动按钮。

#include

unsigned char buf[20];

unsigned char opt_sensors;

int incomingByte = 0;

int loopCount = 0;

char showTemp = 0, showHum = 0, showLight = 0, showSound = 0, degCorf = 0, showCO2 = 0, showVOC = 0, showPwr = 0, showEvents = 0;

String sampPeriodTxt;

float sampPeriod = 1;

void setup() {

// put your setup code here, to run once:

Wire.begin(); // join i2c bus (address optional for master)

Serial.begin(9600); // start serial for output monitor

}

void restart_info() {

// Data and basic information are acquired from the module

Wire.beginTransmission(0x2A); // transmit to device

Wire.write(byte(0x80)); // sends instruction to read firmware version

Wire.endTransmission(); // stop transmitting

Wire.requestFrom(0x2A, 1); // request byte from slave device

unsigned char fw_ver = Wire.read(); // receive a byte

Wire.beginTransmission(0x2A); // transmit to device

Wire.write(byte(0x81)); // sends instruction to read firmware subversion

Wire.endTransmission(); // stop transmitting

Wire.requestFrom(0x2A, 1); // request byte from slave device

unsigned char fw_sub_ver = Wire.read(); // receive a byte

Wire.beginTransmission(0x2A); // transmit to device

Wire.write(byte(0x82)); // sends instruction to read optional sensors byte

Wire.endTransmission(); // stop transmitting

Wire.requestFrom(0x2A, 1); // request byte from slave device

opt_sensors = Wire.read(); // receive a byte

delay(1000);

//If device contains additional CO2 and audio sensor, it is indicated here

Serial.print(“AmbiMate sensors: 4 core”);

if (opt_sensors & 0x01)

Serial.print(“ + CO2”);

if (opt_sensors & 0x04)

Serial.print(“ + Audio”);

Serial.println(“ ”);

Serial.print(“AmbiMate Firmware version ”);

Serial.print(fw_ver);

Serial.print(“。”);

Serial.println(fw_sub_ver);

Serial.print(“Select which sensors to receive data from: ”);

Serial.print(“Temperature [Y/N]: ”);

while (Serial.available() == 0);

showTemp = Serial.read();

Serial.println(showTemp);

Serial.print(“deg C or F [C/F]: ”);

while (Serial.available() == 0);

degCorf = Serial.read();

Serial.println(degCorf);

Serial.print(“Humidity [Y/N]: ”);

while (Serial.available() == 0);

showHum = Serial.read();

Serial.println(showHum);

Serial.print(“Ambient Light [Y/N]: ”);

while (Serial.available() == 0);

showLight = Serial.read();

Serial.println(showLight);

if (opt_sensors & 0x04)

{

Serial.print(“Audio [Y/N]: ”);

while (Serial.available() == 0);

showSound = Serial.read();

Serial.println(showSound);

}

if (opt_sensors & 0x01)

{

Serial.print(“eCO2 [Y/N]: ”);

while (Serial.available() == 0);

showCO2 = Serial.read();

Serial.println(showCO2);

Serial.print(“VOC [Y/N]: ”);

while (Serial.available() == 0);

showVOC = Serial.read();

Serial.println(showVOC);

}

Serial.print(“Power [Y/N]: ”);

while (Serial.available() == 0);

showPwr = Serial.read();

Serial.println(showPwr);

Serial.print(“PIR and Motion Events [Y/N]: ”);

while (Serial.available() == 0);

showEvents = Serial.read();

Serial.println(showEvents);

Serial.print(“ ”);

Serial.print(“Sample Interval[Secs]: ”);

while (Serial.available() == 0);

sampPeriodTxt = “”;

while (Serial.available() 》 0)

{

int inChar = Serial.read();

sampPeriodTxt += (char)inChar;

}

Serial.println(sampPeriodTxt);

sampPeriod = sampPeriodTxt.toFloat();

if (sampPeriod 《 0.5)

{

sampPeriod = 0.5;

Serial.print(“Input exceeds limits, Sample period set to minimum, 0.5 seconds ”);

}

sampPeriod = sampPeriod * 1000; // convert to mSecs

}

//Top line of headings are printed using the following

void printLabels(void) {

Serial.println(“ ”);

Serial.println(“ ”);

// Construct the first line of the headings

if ((showTemp == ‘Y’) || (showTemp == ‘y’))

Serial.print(“Temperature ”);

if ((showHum == ‘Y’) || (showHum == ‘y’))

Serial.print(“Humidity ”);

if ((showLight == ‘Y’) || (showLight == ‘y’))

Serial.print(“Light ”);

if (opt_sensors & 0x04)

{

if ((showSound == ‘Y’) || (showSound == ‘y’))

Serial.print(“Audio ”);

}

if (opt_sensors & 0x01)

{

if ((showCO2 == ‘Y’) || (showCO2 == ‘y’))

Serial.print(“eCO2 ”);

if ((showVOC == ‘Y’) || (showVOC == ‘y’))

Serial.print(“VOC ”);

}

if ((showPwr == ‘Y’) || (showPwr == ‘y’))

Serial.print(“Power ”);

if ((showEvents == ‘Y’) || (showEvents == ‘y’))

Serial.print(“Event ”);

else

Serial.print(“ ”);

// Construct the second line of the headings

if ((showTemp == ‘Y’) || (showTemp == ‘y’))

{

if ((degCorf == ‘F’) || (degCorf == ‘f’))

Serial.print(“deg F ”);

else

Serial.print(“deg C ”);

}

if ((showHum == ‘Y’) || (showHum == ‘y’))

Serial.print(“% ”);

if ((showLight == ‘Y’) || (showLight == ‘y’))

Serial.print(“Lux ”);

if (opt_sensors & 0x04)

{

if ((showSound == ‘Y’) || (showSound == ‘y’))

Serial.print(“dB ”);

}

if (opt_sensors & 0x01)

{

if ((showCO2 == ‘Y’) || (showCO2 == ‘y’))

Serial.print(“PPM ”);

if ((showVOC == ‘Y’) || (showVOC == ‘y’))

Serial.print(“PPB ”);

}

if ((showPwr == ‘Y’) || (showPwr == ‘y’))

Serial.print(“volts”);

Serial.print(“ ”);

}

//Loop starts here

void loop() {

if (loopCount == 0)

{

restart_info();

loopCount = 1;

}

if (loopCount == 1)

{

printLabels();

loopCount = 2;

}

// All sensors except the CO2 sensor are scanned in response to this command

Wire.beginTransmission(0x2A); // transmit to device

// Device address is specified in datasheet

Wire.write(byte(0xC0)); // sends instruction to read sensors in next byte

Wire.write(0xFF); // 0xFF indicates to read all connected sensors

Wire.endTransmission(); // stop transmitting

// Delay to make sure all sensors are scanned by the AmbiMate

delay(100);

Wire.beginTransmission(0x2A); // transmit to device

Wire.write(byte(0x00)); // sends instruction to read sensors in next byte

Wire.endTransmission(); // stop transmitting

Wire.requestFrom(0x2A, 15); // request 6 bytes from slave device

// Acquire the Raw Data

unsigned int i = 0;

while (Wire.available()) { // slave may send less than requested

buf[i] = Wire.read(); // receive a byte as character and store in buffer

i++;

}

// convert the raw data to engineering units, see application spec for more information

unsigned int status = buf[0];

float temperatureC = (buf[1] * 256.0 + buf[2]) / 10.0;

float temperatureF = ((temperatureC * 9.0) / 5.0) + 32.0;

float Humidity = (buf[3] * 256.0 + buf[4]) / 10.0;

unsigned int light = (buf[5] * 256.0 + buf[6]);

unsigned int audio = (buf[7] * 256.0 + buf[8]);

float batVolts = ((buf[9] * 256.0 + buf[10]) / 1024.0) * (3.3 / 0.330);

unsigned int co2_ppm = (buf[11] * 256.0 + buf[12]);

unsigned int voc_ppm = (buf[13] * 256.0 + buf[14]);

if ((showTemp == ‘Y’) || (showTemp == ‘y’))

{

if ((degCorf == ‘F’) || (degCorf == ‘f’))

Serial.print(temperatureF, 1);

else

Serial.print(temperatureC, 1);

Serial.print(“ ”);

}

if ((showHum == ‘Y’) || (showHum == ‘y’))

{

Serial.print(Humidity, 1);

Serial.print(“ ”);

}

if ((showLight == ‘Y’) || (showLight == ‘y’))

{

Serial.print(light);

Serial.print(“ ”);

}

if (opt_sensors & 0x04)

{

if ((showSound == ‘Y’) || (showSound == ‘y’))

{

Serial.print(audio);

Serial.print(“ ”);

}

}

if (opt_sensors & 0x01)

{

if ((showCO2 == ‘Y’) || (showCO2 == ‘y’))

{

Serial.print(co2_ppm);

Serial.print(“ ”);

}

if ((showVOC == ‘Y’) || (showVOC == ‘y’))

{

Serial.print(voc_ppm);

Serial.print(“ ”);

}

}

if ((showPwr == ‘Y’) || (showPwr == ‘y’))

{

Serial.print(batVolts);

Serial.print(“ ”);

}

if ((showEvents == ‘Y’) || (showEvents == ‘y’))

{

if (status & 0x80)

Serial.print(“ PIR_EVENT”);

if (status & 0x02)

Serial.print(“ AUDIO_EVENT”);

if (status & 0x01)

Serial.print(“ MOTION_EVENT”);

}

Serial.print(“ ”);

// all sensors except the CO2VOC sensor are scanned at this rate.

// CO2/VOC sensor is only updated in AmbiMate every 60 seconds

delay(sampPeriod - 100);

incomingByte = Serial.read();

if ((incomingByte == ‘R’) || (incomingByte == ‘r’))

{

//Serial.print(“Got R ”);

loopCount = 0;

}

}

上传代码后,点击串行监视器。

选择你想要的传感器喜欢通过输入‘ Y ’来选择它。

您现在可以看到传感器数据进来。

我希望这个超级传感器模块能够为您未来的项目提供便利!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Arduino
    +关注

    关注

    187

    文章

    6464

    浏览量

    186655
  • ESP32
    +关注

    关注

    18

    文章

    958

    浏览量

    17094
收藏 人收藏

    评论

    相关推荐

    esp32esp8266代码共用吗

    本文将介绍ESP32ESP8266两款流行的微控制器在代码共用性方面的可能性与差异性。 一、引言 随着物联网技术的飞速发展,越来越多的智能设备开始进入我们的生活。其中,ESP32ESP
    的头像 发表于 08-19 18:23 975次阅读

    esp8266和esp32区别是什么

    以下是关于ESP8266和ESP32的主要区别: 处理器和架构 : ESP8266 :使用一个Tensilica L106 80MHz的处理器,属于Xtensa架构。 ESP32 :使
    的头像 发表于 08-19 18:16 4392次阅读

    esp32用什么软件编程

    ESP32是一款由乐鑫(Espressif)推出的低功耗、高性能的Wi-Fi和蓝牙双模微控制器,广泛应用于物联网、智能家居、智能穿戴等领域。要对ESP32进行编程,需要选择合适的编程软件和开发环境
    的头像 发表于 08-19 17:24 2887次阅读

    ESP32-WROOM-32E、ESP32-WROOM-32D、ESP32-WROOM-32U 有什么区别?ESP32-WROOM-32 后缀字母代表的意思是?

    相信很多人心里都有这样的疑问,今天就教大家怎么区分它们。 32D和32U是同一个芯片ESP32-D0WD的模组,主要区别的天线模式,分别是板载和IPEX外接天线。 32E是用的升级版的芯片
    的头像 发表于 07-17 10:09 7763次阅读
    <b class='flag-5'>ESP32</b>-WROOM-32E、<b class='flag-5'>ESP32</b>-WROOM-32D、<b class='flag-5'>ESP32</b>-WROOM-32U  有什么区别?<b class='flag-5'>ESP32</b>-WROOM-32 后缀字母代表的意思是?

    ESP32能取代STM32吗?哪个更好?

    不能!首先二者不存在哪个更好的问题,因为这两个芯片使用场景各不相同,在嵌入式系统领域,ESP32和STM32都是常见的单片机系列,它们各自具有一定的优势和适用场景。本文主要探讨ESP32是否能够取代
    的头像 发表于 07-06 08:04 8351次阅读
    <b class='flag-5'>ESP32</b>能取代STM32吗?哪个更好?

    请问esp-idf框架可以调用arduino IDE的esp32库吗?

    我最近想移植一个基于arduinoIDE写的esp32 程序到idf框架下的项目,但是由于调用太多arduino上层封装的库导致移植失败,请问idf可以把arduino的库类似与组件一样添加到idf下的components吗?
    发表于 06-24 07:07

    ESP32S3的EEPROM是由FLASH虚拟的,直接在arduinoIDE中擦写EEPROM时是否在底层自动进行了磨损平衡?

    ESP32S3的EEPROM是由FLASH虚拟的,请问直接在arduinoIDE中擦写EEPROM时是否在底层自动进行了磨损平衡? 在用ESP32S3做含有计数器功能的设备,希望可以掉电保存数据
    发表于 06-07 06:27

    ESP32系列ESP32-D0WD双模 超低功耗集成BLE4.2+2.4G WIFI SoC芯片

    ESP32系列ESP32-D0WD双模 超低功耗集成BLE4.2+2.4G WIFI SoC芯片
    的头像 发表于 05-29 11:52 1390次阅读
    <b class='flag-5'>ESP32</b>系列<b class='flag-5'>ESP32</b>-D0WD双模 超低功耗集成BLE4.2+2.4G WIFI SoC芯片

    乐鑫科技发布全新ESP32-H4 SoC

    乐鑫信息科技最新发布了ESP32-H4,这一创新产品是对其ESP32-H2系列的完美补充,进一步巩固了公司在802.15.4和Bluetooth LE领域的产品布局。ESP32-H4作为新一代SoC
    的头像 发表于 05-06 15:18 930次阅读

    ESP32-C2在小魔方遥控器的应用

    我们经常提起的ESP32-C3和ESP32-S3,ESP32-C2感觉话题度没有那么多,但其应用上不可小觑。今天小启就跟大家讲讲ESP32-C2在小魔方遥控器的应用。1射频性能拉满,成
    的头像 发表于 01-13 08:03 782次阅读
    <b class='flag-5'>ESP32</b>-C2在小魔方遥控器的应用

    esp32外置flash的大小

    ESP32是一款功能强大的微控制器,广泛应用于物联网和嵌入式设备领域。虽然ESP32内置了一定的闪存空间,但有时候我们可能需要更大的储存空间来存储更多的数据或者程序。因此,一些厂商推出了外置
    的头像 发表于 01-09 11:24 3862次阅读

    ESP32与SD NAND的协同应用

    SDNAND在乐鑫ESP32上的作用SDNAND是贴片式TF卡,可以用于存储数据,比如视频图片或者代码乐鑫ESP32一颗具有双核处理器的嵌入式系统芯片,有丰富的外设接口,包括Wi-Fi、蓝牙
    的头像 发表于 01-08 13:56 554次阅读
    <b class='flag-5'>ESP32</b>与SD NAND的协同应用

    ESP32-PICO系列技术规格书

    ESP32-PICO 系列是基于 ESP32 芯片 的系统级封装 (SiP) 产品。ESP32-PICO 系列产品包括 ESP32-PICO-D4、
    发表于 12-12 16:56 0次下载
    <b class='flag-5'>ESP32</b>-PICO系列技术规格书

    用了ESP32后,我的Arduino都积灰了,专为零基础新手准备的ESP32入门指南,为什么我不再使用Arduino

      认识ESP32 "ESP32,由Espressif打造,是一系列低成本、低功耗的SoC(System on a Chip)微控制器,拥有Wi-Fi和蓝牙无线功能,以及强大的双核处理器。 无论你
    的头像 发表于 12-12 15:48 6900次阅读
    用了<b class='flag-5'>ESP32</b>后,我的Arduino都积灰了,专为零基础新手准备的<b class='flag-5'>ESP32</b>入门指南,为什么我不再使用Arduino

    ESP32-WROOM-32开发板教程

    ESP32-WROOM-32是一款功能强大的物联网开发板,它基于Espressif的ESP32芯片,拥有更多的性能和功能。在本篇文章中,我将为您提供一份详尽、详实、细致的教程,以帮助您快速上手
    的头像 发表于 12-08 13:55 1w次阅读