Tryck och temperaturövervakning (4 / 10 steg)

Steg 4: Utnyttjande du BMP180

Häll lire les valeurs capté par le BMP 180 il faut modifier le projet précédemment importé. Il faut en faire un inkluderar BMP085.h qui est le header familjefilter à la classe contenant les Méthode propre à notre capteur.

Le kod est composé de 2 fonctions rektor:

  • WrittenHandler: upplysta le buffert envoyé par la hallon au RedBearLab afin de setter un booléen permettant de savoir quel modul est solicité par la hallon
  • m_status_check_handle: Cette fonction est appelé périodiquement, elle kontrollören si une demande de relevé en été faite au capteur si oui elle envoi la valeur lu par le capteur à la hallon via la la méthode updateCharacteristicValue

La périodicité d'appelle à la fonction m_status_check_handle est réglé par l'objet ticker grâce à la méthode bifoga_us.


#include "mbed.h"
#include "ble/BLE.h"
#include "ble/FunctionPointerWithContext.h"
#include "Servo.h"
#include "GattCallbackParamTypes.h"
#include "BMP085.h" < /p >< p > #define BLE_UUID_TXRX_SERVICE 0x0000 / ** < tjänsten nordiska UART UUID. */
#define BLE_UUID_TX_CHARACTERISTIC 0x0002 / ** < UUID TX kännetecken. */
#define BLE_UUIDS_RX_CHARACTERISTIC 0x0003 / ** < UUID RX kännetecken. */

#define TXRX_BUF_LEN 20
#define DIGITAL_OUT_PIN P0_17 //D7
#define DIGITAL_IN_PIN P0_5 //A4
#define PWM_PIN P0_16 //D6
#define SERVO_PIN P0_14 //D10
#define ANALOG_IN_PIN P0_1 //A0

BLE ble;
DigitalOut LED_SET(DIGITAL_OUT_PIN);
DigitalIn BUTTON(DIGITAL_IN_PIN);
PwmOut PWM(PWM_PIN);
Analog ANALOG(ANALOG_IN_PIN);
Servo MYSERVO(SERVO_PIN);
BMP085 myCaptor (P0_29, P0_28);
Seriell pc (USBTX, USBRX);
statisk uint8_t analog_enabled = 0;
statisk uint8_t captor_enabled = 0;
statisk uint8_t captor_enabled_for_pressure = 0;

Den nordiska UART tjänsten
statisk const uint8_t uart_base_uuid [] = {0x71, 0x3D, 0, 0, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
statisk const uint8_t uart_tx_uuid [] = {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
statisk const uint8_t uart_rx_uuid [] = {0x71, 0x3D, 0, 2, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
statisk const uint8_t uart_base_uuid_rev [] = {0x1E, 0x94, 0x8D, 0xF1, 0x48, 0x31, 0x94, 0xBA, 0x75, 0x4C, 0x3E, 0x50, 0, 0, 0x3D, 0x71}; < /p >< p > uint8_t txPayload [TXRX_BUF_LEN] = {0};
uint8_t rxPayload [TXRX_BUF_LEN] = {0};

GattCharacteristic txCharacteristic (uart_tx_uuid, txPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);

GattCharacteristic rxCharacteristic (uart_rx_uuid, rxPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);

GattCharacteristic * uartChars [] = {& txCharacteristic, & rxCharacteristic};

GattService uartService (uart_base_uuid, uartChars, sizeof(uartChars) / sizeof(GattCharacteristic *));

void disconnectionCallback (const Gap::DisconnectionCallbackParams_t * params)
{
PC.printf ("frånkopplad \r\n");
PC.printf ("omstart reklam \r\n");
ble.startAdvertising();
}
void confirmationHandler(uint16_t Handler)
{
om (captor_enabled)
captor_enabled = false;
}
void WrittenHandler (const GattWriteCallbackParams * Handler)
{
uint8_t buf [TXRX_BUF_LEN];
uint16_t bytesRead, index.

om (Handler -> handtag == txCharacteristic.getValueAttribute().getHandle())
{
ble.readCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), buf, & bytesRead);
MEMSET (txPayload, 0, TXRX_BUF_LEN);
memcpy (txPayload, buf, TXRX_BUF_LEN);

för (index = 0; index < bytesread; index ++) = "" pc.putc(buf[index]); = "" om (buf [0] = "=" 0x01) = "" {= "" om (buf [1] = "=" 0x02) = "" while(1) = "" led_set = "! LED_SET,"wait(0.25); =" "} =" "annars =" "0xa0) =" "analog_enabled ="1;"captor_enabled ="1;" 0x03) = "" captor_enabled_for_pressure = "1;" float = "" värde = "(float) buf [1] / 255;" pwm = "värde";} < = "" p = "" >< / bytesread; >< /p >< p > void m_status_check_handle(void)
{
uint8_t buf [4].
om (analog_enabled) / / om analog läsning aktiverad
{
Läsa och skicka
flyta s = ANALOG;
uint16_t värde = s * 1024;
BUF [0] = (0x0B);
BUF [1] = (värde >> 8);
BUF [2] = (värde);
ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 3);
}
om (captor_enabled) / / om analog läsning aktiverad
{
Läsa och skicka
captor_enabled = false;
myCaptor.update();
flyta s = myCaptor.get_temperature() * 100;
int värde = s;
BUF [0] = (värde >> 24);
BUF [1] = (värde >> 16);
BUF [2] = (värde >> 8);
BUF [3] = värde;
för (int jag = 0; jag < 200000; ++ jag)
ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 4);
}
Lägg till för att få trycket
om (captor_enabled_for_pressure)
{
Läsa och skicka
captor_enabled_for_pressure = false;
myCaptor.update();
flyta s = myCaptor.get_pressure() * 100;
uint32_t värde = s;
BUF [0] = (värde >> 24);
BUF [1] = (värde >> 16);
BUF [2] = (värde >> 8);
BUF [3] = värde;
ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 4);
}
} < /p >< p > int main(void)
{
Ticker ticker;
ticker.attach_us (m_status_check_handle, 200000);

ble.init();
ble.onDisconnection(disconnectionCallback);
ble.onDataWritten(WrittenHandler);
ble.onConfirmationReceived(confirmationHandler);
PC.baud(9600);
PC.printf ("SimpleChat Init \r\n");

installationsprogrammet för reklam
ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
ble.accumulateAdvertisingPayload (GapAdvertisingData::SHORTENED_LOCAL_NAME,
(const uint8_t *) "Mustafa", sizeof("Mustafa") - 1);
ble.accumulateAdvertisingPayload (GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
(const uint8_t *) uart_base_uuid_rev, sizeof(uart_base_uuid));
100ms; i multiplar av 0.625ms.
ble.setAdvertisingInterval(160);

ble.addService(uartService);

ble.startAdvertising();

PC.printf ("reklam börja \r\n");

While(1)
{
ble.waitForEvent();
}
}

Se Steg
Relaterade Ämnen

Tryck och temperatur Arduino indikator

Detta projekt läser barometertryck, temperatur, datum, tid och hanterar display färg på en telefon Siemens S55 jag rensad.Steg 1: SystembeskrivningSom kan ses i bilderna ovan och i bifogat diagram, består systemet av (BOM):Arduino Uno R3 modell Ardui...

Arduino Nano: BMP180 barometertryck och temperatur I2C 2 X 16 LCD uppvisning med Visuino

BMP180 är en mycket populär temperatur och barometriskt tryck Arduino kombinationsgivaren. Jag har redan gjort Instuctable med BMP180. Ett antal människor frågade men hur du kan ansluta en annan I2C enhet till samma I2C buss som BMP180. Äntligen har...

Temperatur och luftfuktighet övervakning med SHT25 och Raspberry Pi

Vi har nyligen arbetat med olika projekt som krävs för temperatur och luftfuktighet övervakning och sedan insåg vi att dessa två parametrar faktiskt spela en nyckelroll i att ha en uppskattning av den arbetande effektiviteten i ett system. Både på de...

Temperatur och luftfuktighet övervakning med hjälp av SHT25 och Arduino Nano

Vi har nyligen arbetat med olika projekt som krävs för temperatur och luftfuktighet övervakning och sedan insåg vi att dessa två parametrar faktiskt spela en nyckelroll i att ha en uppskattning av den arbetande effektiviteten i ett system. Både på de...

Temperatur och luftfuktighet övervakning med hjälp av SHT25 och partikel Photon

Vi har nyligen arbetat med olika projekt som krävs för temperatur och luftfuktighet övervakning och sedan insåg vi att dessa två parametrar faktiskt spela en nyckelroll i att ha en uppskattning av den arbetande effektiviteten i ett system. Både på de...

DS3231 OLED väckarklocka med 2-knappars menyinställning och temperatur display

UPPDATERING: V1.1 klocka paket laddade upp för kompatibilitet med senaste IDEs.Video på:: http://youtu.be/ikNw1iLE9vgAlarm demovideo: http://youtu.be/jlZBCuQeswADetta är en OLED väckarklocka jag byggt med en Arduino Micro, en liten OLED 128 x 64 visa...

Arduino Nano - HTS221 relativ fuktighet och temperatur Sensor handledning

HTS221 är en ultra-kompakt kapacitiv digital sensor för relativ fuktighet och temperatur. Den innehåller ett fjärranalys element och en blandad signal ansökan specifik integrerad circuit(ASIC) att mätning genom digital seriella gränssnitt. Integrerat...

Raspberry Pi HTS221 relativ fuktighet och temperatur Sensor Java Tutorial

HTS221 är en ultra-kompakt kapacitiv digital sensor för relativ fuktighet och temperatur. Den innehåller ett fjärranalys element och en blandad signal ansökan specifik integrerad circuit(ASIC) att mätning genom digital seriella gränssnitt. Integrerat...

Temperatur övervakning

detta projekt är en enkel temperaturövervakning system baserat på en mycket billig sensor LM35, jag är fortfarande amatör och denna kod är baserad på andra 2 projekt från fritizing "http://fritzing.org/projects/how-to-connect-a-qy-1602a-lcd-to-arduin...

Online temperaturövervakning genom att använda Arduino + Ethernet Shield

Hej, idag jag ska Visa du kille hur man gör arduino temperaturövervakning online, detta exempel är webbaserade-det betyder att du kan ansluta från var som helst, Combine AJAX och PHP tillsammans som kan ge temperaturdata mestadels realtime utan uppda...

Höjd-, tryck- och temperaturmätning med BMP180 och LinkitOne styrelse

Någonsin kan undrat du mäta trycket, höjd och temperatur samtidigt... Ja kan detta vara gjort med den berömda BMP180 Sensor och Mediatek LinkitOne styrelsen...Kan börja...Steg 1: kravBMP180Mediatek LinkIt en styrelseAnsluta kablarSkärbrädaSteg 2: ans...

Fan Controller med spänning och temperatur avläsning

Jag hade nyligen ett datorfel cd-rom och snarare än att kasta ut, jag beslutade att använda fodralet för en anpassad fläktkontroll. Fläktkontroll består av två komponenter, en 10 k potentiometer och en NPN-transistor. Jag använde en C1984 i stället f...

Rullning ledde baserat tid och temperatur display

I projektet används för att Visa realtidsklocka och temperatur på rullning ledde visasSteg 1: KomponentlistaDen mängdDC adaptar (5v 2 amp) × 1DC-uttag × 1P89V51RD2 controller IC × 140 pin IC bas × 116 pin IC bas × 3Crystal 11.0592 Mhz × 1Kondensator...

Digital fuktighet och temperatur Monitor

Hej varje enAtt säkerställa rätt luftfuktighet inomhus har viktiga hud, allergen och andra hälsofördelar genom att hämma tillväxten av, bakterier, virus, svampar och etc. Denna Digital temperatur och luftfuktighet Monitor kan du kontrollera komfort v...

Luftfuktighet och temperatur reagerar Lightsource

Detta projekt kom ur min önskan att få en aktiv temperatur avläsning när jag är i mitt rum. att inte vara förtjust i att titta på en liten skärm över rummet, jag ville ha något jag bara kunde känna i mitt rum. med en enkel blick på ljuset i rummet ku...

Avlägsen temperaturövervakning med MQTT och ESP8266 moduler

Om du vill övervaka vissa avlägsna temperaturer detta Instructable visar du kan göra detta med hjälp av några ESP8266 moduler, MQTT (med en mäklare), LCD-skärm (för lokal övervakning), hembiträdet (för lokala och fjärranslutna övervakning), och orsak...

Hemma temperaturövervakning med Raspberry Pi och Thingspeak (med BMP180)

Det är en ålder av IoT.Each dagen mer och fler människor ansluter sig till molnet. Så verkade det som göra orätt att temperatur/tryck givare och en raspberry pi B + (en nästan 1GHz pumpas upp odjuret) som låg runt tabellen dator. De behövs för att ko...

DIY AVR mikrokontroller baserade temperaturövervakning och styrsystem

AVR mikrokontroller baserade Tempereringsaggregatet, använder det LM35 temperaturgivare för mätning av temperatur och 16 x 2 LCD används för att Visa temperaturen börvärde, värmare Status och aktuell temperatur, det kontrollerar temperatur genom att...

Temperaturövervakning med hjälp av MCP9808 och Arduino Nano

MCP9808 är en mycket noggrann digital temperatur sensor ±0, 5 ° C I2C mini modul. De förkroppsligas med user - programmerbar register som underlättar temperaturkännande program. MCP9808 hög noggrannhet temperaturgivare har blivit en industristandard...