专栏名称: 传感器技术
制造业的未来是智能化,智能化的基础就是传感器; 互联网的方向是物联网,物联网的基石也是传感器; 关注传感器技术,获得技术资讯、产品应用、市场机会,掌握最黑科技,为中国工业导航。
目录
相关文章推荐
字句都是你  ·  vivo终于妥协,发布仅一个月跌至1489元 ... ·  2 天前  
字句都是你  ·  vivo终于妥协,发布仅一个月跌至1489元 ... ·  2 天前  
果粉之家  ·  iPhone17Air或成史上最薄iPhone! ·  3 天前  
果粉之家  ·  iPhone17Air或成史上最薄iPhone! ·  3 天前  
51好读  ›  专栏  ›  传感器技术

不知道这个功能?你的Android手机白用了

传感器技术  · 公众号  ·  · 2017-07-09 06:27

正文

来源:CSDN物联网开发


图1. Android App 控制 LED


图2. Android App 界面


接收示例


下图是 Android 手机接收数据的示例。Arduino 开发板通过温度传感器 DS18B20 获取温度值,Android App 每15秒刷新一次温度值,并且为了更好的展示效果,我实现了手机的语音播报。在后续的步骤4、5、6中将详细描述 Arduino 代码和应用程序。


图3. Android 手机显示环境温度


接下来,我将一步步介绍布线方法,编写一个能够收发命令的 Arduino sketch , 并且编写应用程序。本教程需要你对 Arduino 有基本的了解,熟悉它的 IDE,最好做过一些小项目。这样的话,本教程中的内容将是非常好理解的,你将非常容易实现对 Arduino 的串行通信。


步骤1
接线和零件清单



图4. 发送示例硬件连线图


连线方法如上图所示,非常简单。


零件清单:


  • Arduino开发板

  • 蓝牙串口模块

步骤2
Arduino 代码


以下是我编写的 Arduino 代码,你可以在此基础上随意修改。 

需要注意的是波特率,请确保它和你的蓝牙模块匹配,建议你仔细查看数据手册或者 AT 指令表。


const int ledPin = 2;  // the pin that the LED is attached to

byte serialA;

void setup()

{

  // initialize the serial communication:

  Serial.begin(19200); //baud rate - make sure it matches that of the module you got:

  // initialize the ledPin as an output:

  pinMode(ledPin, OUTPUT);

}

void loop() {

  if (Serial.available() > 0) {serialA = Serial.read();Serial.println(serialA);}

    switch (serialA) {

    case 1:

      digitalWrite(ledPin, HIGH);

      break;

    case 2:

      digitalWrite(ledPin, LOW);

      break;

    case 3:

      digitalWrite(ledPin, HIGH);

      delay(100);

      digitalWrite(ledPin, LOW);

      delay(100);

     default:

     break;

  }

}


步骤3
 App 和 App Inventor


图5. App Inventor 界面


步骤4
从 Arduino 接收数据


本步骤将介绍一个从 Arduino 开发板接收数据的示例。 


我决定做一些实用的东西,因此选择了一个 DS18B20 温度传感器。Arduino 开发板使用一根线就可以实现和传感器的通信,它调用Arduino 版的 OneWrite 库来计算温度值,然后每隔 500ms 通过蓝牙模块将温度值发送出去。


手机 App 每 500ms 轮询一次串口,如果有数据则读取并显示在手机屏幕上。此外,手机 App 还可以通过一个选项打开文本到语音的转换功能,这样手机将每隔15秒语音播报一次温度值。


步骤5
传感器的 Arduino 代码


你需要使用 OneWrite 库来计算温度值,点击此处获取 OneWrite 库的代码。


传感器相关的 Arduino 代码如下:


#include

int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2

//Temperature chip i/o

OneWire ds(DS18S20_Pin); // on digital pin 2

void setup()

{

  // initialize the serial communication:

  Serial.begin(19200);

  // initialize the ledPin as an output:

}

void loop() {

  float temperature = getTemp();

  Serial.println(temperature); delay (500);

}

float getTemp(){

  //returns the temperature from one DS18S20 in DEG Celsius

  byte data[12];

  byte addr[8];

  if ( !ds.search(addr)) {

    //no more sensors on chain, reset search

    ds.reset_search();

    return -100;

  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {

    Serial.println("CRC is not valid!");

    return -1000;

  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) {

    Serial.print("Device is not recognized");

    return -1000;

  }

  ds.reset();

  ds.select(addr);

  ds.write(0x44,1); //start conversion, with parasite power on at the end

  byte present = ds.reset();

  ds.select(addr);

  ds.write(0xBE); // Read Scratchpad

  for (int i = 0; i < 9; i++) {

    data[i] = ds.read();

  }

  ds.reset_search();

  byte MSB = data[1];

  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB);

  float TemperatureSum = tempRead / 16;

  return TemperatureSum;

}


步骤6
接收数据 - 手机端