Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 2:0ee90da44162, committed 2016-05-19
- Comitter:
- nightseas
- Date:
- Thu May 19 15:52:24 2016 +0000
- Parent:
- 1:0c1053275589
- Commit message:
- AirBoxProtoDemo
Changed in this revision
--- a/AplicationLayer/DebugCommander.cpp Thu Jul 09 05:14:58 2015 +0000
+++ b/AplicationLayer/DebugCommander.cpp Thu May 19 15:52:24 2016 +0000
@@ -114,6 +114,7 @@
uart_db.printf(" w. Test WiFi module.\n\r");
uart_db.printf(" m. Manual switch SMUX channel.\n\r");
uart_db.printf(" q. Exit demo.\n\r\n\r");
+ uart_db.printf(" Input:\n\r\n\r");
while(!uart_db.readable())
{
@@ -171,6 +172,16 @@
case '6':
DebugFunc_UvLevel();
break;
+
+ case 'z':
+ MHZ19_CalZero();
+ break;
+
+
+ case 'f':
+ MHZ19_CalFull();
+ break;
+
default:
uart_db.printf("Incorrect input!\n\r");
break;
--- a/PeripheralLayer/AirAdaptorLib.cpp Thu Jul 09 05:14:58 2015 +0000
+++ b/PeripheralLayer/AirAdaptorLib.cpp Thu May 19 15:52:24 2016 +0000
@@ -16,6 +16,8 @@
//GPIO for CD4052 serial mux control
DigitalOut smux_a(PB_14, 0), smux_b(PB_13, 0), smux_oe_n(PB_15, 1);
+AnalogIn adc_ch10(PC_0), adc_ch11(PC_1);
+
//Init board library
//--> Success return 0
@@ -159,4 +161,4 @@
{
for(int ledNum = 0; ledNum < LED_NUM_MAX; ledNum++)
LedOff(ledNum);
-}
\ No newline at end of file
+}
--- a/PeripheralLayer/AirAdaptorLib.h Thu Jul 09 05:14:58 2015 +0000 +++ b/PeripheralLayer/AirAdaptorLib.h Thu May 19 15:52:24 2016 +0000 @@ -17,6 +17,9 @@ //GPIO for CD4052 serial mux control extern DigitalOut smux_a, smux_b, smux_oe_n; +//ADC for analog sensors +extern AnalogIn adc_ch10, adc_ch11; + //Init functions extern int BoardLibInit(void);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PeripheralLayer/PeMod_BMP180.cpp Thu May 19 15:52:24 2016 +0000
@@ -0,0 +1,49 @@
+#include "SysConfig.h"
+
+#define BMP180_ADDR (0x40<<1) //BMP180 address
+#define BMP180_CMD_TMP_NH (0xF3) //Non-hold temp trigger command
+#define BMP180_CMD_RH_NH (0xF5) //Non-hold temp trigger command
+
+#define i2c_bmp180 i2c_sen
+//#define uart_db uart_pc
+
+int BMP180_Init(void)
+{
+ return 0;
+}
+
+float BMP180_ReadTemp(void)
+{
+ char cmd = BMP180_CMD_TMP_NH, data[3];
+ float temp;
+
+ i2c_bmp180.write(BMP180_ADDR, &cmd, 1, 1);
+ wait_us(20);
+ i2c_bmp180.stop();
+
+ wait_ms(100);
+ i2c_bmp180.read(BMP180_ADDR, data, 3);
+ #if defined uart_db
+ uart_db.printf("\n\rBMP180 return 0x%02X 0x%02X 0x%02X\n\r", data[0], data[1], data[2]);
+ #endif
+ temp = (256.0 * data[0] + data[1]) * 175.72 / (0x1 << 16) - 46.85;
+ return temp;
+}
+
+float BMP180_ReadRh(void)
+{
+ char cmd = BMP180_CMD_RH_NH, data[3];
+ float rh;
+
+ i2c_bmp180.write(BMP180_ADDR, &cmd, 1, 1);
+ wait_us(20);
+ i2c_bmp180.stop();
+
+ wait_ms(100);
+ i2c_bmp180.read(BMP180_ADDR, data, 3);
+ #if defined uart_db
+ uart_db.printf("\n\rBMP180 return 0x%02X 0x%02X 0x%02X\n\r", data[0], data[1], data[2]);
+ #endif
+ rh = (256.0 * data[0] + data[1]) * 125 / (0x1 << 16) - 6;
+ return rh;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PeripheralLayer/PeMod_BMP180.h Thu May 19 15:52:24 2016 +0000 @@ -0,0 +1,8 @@ +#ifndef _PE_BMP180_ +#define _PE_BMP180_ + +extern int BMP180_Init(void); +extern float BMP180_ReadTemp(void); +extern float BMP180_ReadRh(void); + +#endif \ No newline at end of file
--- a/PeripheralLayer/PeMod_ESP01.cpp Thu Jul 09 05:14:58 2015 +0000
+++ b/PeripheralLayer/PeMod_ESP01.cpp Thu May 19 15:52:24 2016 +0000
@@ -1,71 +1,78 @@
#include "SysConfig.h"
-#define ESP01_CMD_LEN 9
-#define ESP01_DAT_LEN 9
+//ACK waiting time: 2000ms
+#define ESP01_ACK_TIMEOUT 5000
+
+#define uart_esp uart_sen
+#define uart_db uart_pc
-#define uart_esp01 uart_sen
-//#define uart_db uart_pc
+//For serial waiting timeout counting
+Timer timer_esp;
-const uint8_t ESP01_CmdManualMode[ESP01_CMD_LEN] = {0xFF, 0x01, 0x78, 0x41, 0x00, 0x00, 0x00, 0x00, 0x46};
-const uint8_t ESP01_CmdReadCO2[ESP01_CMD_LEN] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
+string ESP01_CmdInitMixMode = "CWMODE=3";
+string ESP01_CmdInitApInfo = "CWSAP=\"AirBoxProto01\",\"12345678\",6,3";
+string ESP01_CmdReset = "AT+RST";
+string ESP01_CmdMuxConnEn = "AT+CIPMUX=1";
+string ESP01_CmdInitTcpSvr = "AT+CIPSERVER=1,2222";
int ESP01_Init(void)
{
- //Change ESP01 to manual request & reply mode
- for(int i=0; i<ESP01_CMD_LEN; i++)
- uart_esp01.putc(ESP01_CmdManualMode[i]);
+ if(ESP01_InterfaceCheck() != 0)
+ {
+ #if defined uart_db
+ uart_db.printf("ESP01_InterfaceCheck failed!\n\r");
+ #endif
+ return -1;
+ }
+
+ ESP01_SendAtCmd(ESP01_CmdInitMixMode);
+
+ ESP01_SendAtCmd(ESP01_CmdInitApInfo);
+
+ ESP01_SendAtCmd(ESP01_CmdReset);
+
+ wait_ms(8000);
+
+ ESP01_SendAtCmd(ESP01_CmdMuxConnEn);
+
+ ESP01_SendAtCmd(ESP01_CmdInitTcpSvr);
return 0;
}
-int ESP01_ReadCO2(void)
-{
- int co2Vol, i, sum = 0;
- uint8_t data[ESP01_DAT_LEN];
-
- for(i=0; i<ESP01_CMD_LEN; i++)
- uart_esp01.putc(ESP01_CmdReadCO2[i]);
-
- #if defined uart_db
- uart_db.printf("\n\rESP01 return ");
- #endif
-
- for(i=0; i<ESP01_DAT_LEN; i++)
+int ESP01_AckCheck(void)
+{
+ int timeStart;
+ string data;
+ timer_esp.start();
+ timeStart = timer_esp.read_ms();
+
+ while(timer_esp.read_ms() - timeStart < ESP01_ACK_TIMEOUT)
{
- while(!uart_esp01.readable());
- data[i] = uart_esp01.getc();
- #if defined uart_db
- uart_db.printf("0x%02X ", data[i]);
- #endif
- }
-
- #if defined uart_db
- uart_db.printf(".\n\r");
- #endif
+ if(uart_esp.readable())
+ {
+ while(uart_esp.getc() == 'O')
+ {
+ if(uart_esp.getc() == 'K')
+ return 0;
+ }
+ }
+ }
- sum = ESP01_CalCheckSum(data);
- if(data[ESP01_DAT_LEN - 1] == sum)
- {
- co2Vol = data[2] *256 + data[3];
- return co2Vol;
- }
- else
- {
- #if defined uart_db
- uart_db.printf("Incorrect checksum 0x%02X, expect 0x%02X.\n\r", sum, data[ESP01_DAT_LEN - 1]);
- #endif
- return -1;
- }
+ timer_esp.stop();
+ timer_esp.reset();
+ uart_db.printf("ESP01_AckCheck timeout %dms!\n\r", ESP01_ACK_TIMEOUT);
+ return -2;
}
-uint8_t ESP01_CalCheckSum(uint8_t *packet)
+int ESP01_InterfaceCheck(void)
{
- uint8_t i, checksum = 0;
- for( i = 1; i < 8; i++)
- {
- checksum += packet[i];
- }
- checksum = 0xff - checksum;
- checksum += 1;
- return checksum;
+ uart_esp.printf("AT\r\n");
+ return ESP01_AckCheck();
}
+
+void ESP01_SendAtCmd(string strCmd)
+{
+ uart_esp.printf("AT+%s\r\n", strCmd.c_str());
+}
+
--- a/PeripheralLayer/PeMod_ESP01.h Thu Jul 09 05:14:58 2015 +0000 +++ b/PeripheralLayer/PeMod_ESP01.h Thu May 19 15:52:24 2016 +0000 @@ -2,8 +2,8 @@ #define _PE_ESP01_ extern int ESP01_Init(void); -extern int ESP01_ReadCO2(void); - -extern uint8_t ESP01_CalCheckSum(uint8_t *packet); +extern int ESP01_InterfaceCheck(void); +extern void ESP01_SendAtCmd(string strCmd); +extern int ESP01_AckCheck(void); #endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PeripheralLayer/PeMod_MHZ19.cpp Thu May 19 15:52:24 2016 +0000
@@ -0,0 +1,84 @@
+#include "SysConfig.h"
+
+#define MHZ19_CMD_LEN 9
+#define MHZ19_DAT_LEN 9
+
+#define uart_mhz19 uart_sen
+//#define uart_db uart_pc
+
+const uint8_t MHZ19_CmdMCalZero[MHZ19_CMD_LEN] = {0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78};
+const uint8_t MHZ19_CmdMCalFull[MHZ19_CMD_LEN] = {0xFF, 0x01, 0x88, 0x07, 0xD0, 0x00, 0x00, 0x00, 0xA0};
+const uint8_t MHZ19_CmdReadCO2[MHZ19_CMD_LEN] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
+
+int MHZ19_Init(void)
+{
+ return 0;
+}
+
+int MHZ19_ReadCO2(void)
+{
+ int co2Vol, i, sum = 0;
+ uint8_t data[MHZ19_DAT_LEN];
+
+ for(i=0; i<MHZ19_CMD_LEN; i++)
+ uart_mhz19.putc(MHZ19_CmdReadCO2[i]);
+
+ #if defined uart_db
+ uart_db.printf("\n\rMHZ19 return ");
+ #endif
+
+ for(i=0; i<MHZ19_DAT_LEN; i++)
+ {
+ while(!uart_mhz19.readable());
+ data[i] = uart_mhz19.getc();
+ #if defined uart_db
+ uart_db.printf("0x%02X ", data[i]);
+ #endif
+ }
+
+ #if defined uart_db
+ uart_db.printf(".\n\r");
+ #endif
+
+ sum = MHZ19_CalCheckSum(data);
+ if(data[MHZ19_DAT_LEN - 1] == sum)
+ {
+ co2Vol = data[2] *256 + data[3];
+ return co2Vol;
+ }
+ else
+ {
+ #if defined uart_db
+ uart_db.printf("Incorrect checksum 0x%02X, expect 0x%02X.\n\r", sum, data[MHZ19_DAT_LEN - 1]);
+ #endif
+ return -1;
+ }
+}
+
+int MHZ19_CalZero(void)
+{
+ for(int i=0; i<MHZ19_CMD_LEN; i++)
+ uart_mhz19.putc(MHZ19_CmdMCalZero[i]);
+
+ return 0;
+}
+
+int MHZ19_CalFull(void)
+{
+ for(int i=0; i<MHZ19_CMD_LEN; i++)
+ uart_mhz19.putc(MHZ19_CmdMCalFull[i]);
+
+ return 0;
+}
+
+uint8_t MHZ19_CalCheckSum(uint8_t *packet)
+{
+ uint8_t i, checksum = 0;
+ for( i = 1; i < 8; i++)
+ {
+ checksum += packet[i];
+ }
+ checksum = 0xff - checksum;
+ checksum += 1;
+ return checksum;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PeripheralLayer/PeMod_MHZ19.h Thu May 19 15:52:24 2016 +0000 @@ -0,0 +1,12 @@ +#ifndef _PE_MHZ19_ +#define _PE_MHZ19_ + +extern int MHZ19_Init(void); +extern int MHZ19_ReadCO2(void); + +extern int MHZ19_CalZero(void); +extern int MHZ19_CalFull(void); + +extern uint8_t MHZ19_CalCheckSum(uint8_t *packet); + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PeripheralLayer/PeMod_UV370.cpp Thu May 19 15:52:24 2016 +0000
@@ -0,0 +1,50 @@
+#include "SysConfig.h"
+
+#define UV_LV_MAX 11
+#define UV_SMP_AVG 5
+const int UvLvTable[] = {50, 227, 318, 408, 503, 606, 696, 795, 881, 976, 1079, 1170};
+
+#define i2c_uv i2c_sen
+//#define uart_db uart_pc
+
+int UV_Init(void)
+{
+ return 0;
+}
+
+float UV_ReadVolt(void)
+{
+ return(adc_ch10.read() * 3300);
+}
+
+float UV_ReadLv(void)
+{
+ int i;
+ float volt = 0, level;
+ for(i=0; i<UV_SMP_AVG; i++)
+ volt += UV_ReadVolt();
+ volt = volt / UV_SMP_AVG ;
+
+ if(volt < (float)UvLvTable[0])
+ {
+ level = 0;
+ return level;
+ }
+
+ if(volt > (float)UvLvTable[UV_LV_MAX])
+ {
+ level = 11;
+ return level;
+ }
+
+ for(i=0; i<UV_LV_MAX; i++)
+ {
+ if(volt > (float)UvLvTable[i] && volt < (float)UvLvTable[i+1])
+ {
+ level = i + (volt - UvLvTable[i]) / (UvLvTable[i+1] - UvLvTable[i]);
+ return level;
+ }
+ }
+
+ return -1;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PeripheralLayer/PeMod_UV370.h Thu May 19 15:52:24 2016 +0000 @@ -0,0 +1,8 @@ +#ifndef _PE_UV_ +#define _PE_UV_ + +extern int UV_Init(void); +extern float UV_ReadTemp(void); +extern float UV_ReadRh(void); + +#endif \ No newline at end of file
--- a/SysConfig.h Thu Jul 09 05:14:58 2015 +0000 +++ b/SysConfig.h Thu May 19 15:52:24 2016 +0000 @@ -1,6 +1,7 @@ //System Includings #include "mbed.h" +#include <string> //Application Layer Modules #include "DebugCommander.h" @@ -10,4 +11,5 @@ #include "PeMod_SHT20.h" #include "PeMod_MHZ19.h" #include "PeMod_ZE08.h" -#include "PeMod_ZPH01.h" \ No newline at end of file +#include "PeMod_ZPH01.h" +#include "PeMod_ESP01.h" \ No newline at end of file
--- a/main.cpp Thu Jul 09 05:14:58 2015 +0000
+++ b/main.cpp Thu May 19 15:52:24 2016 +0000
@@ -28,6 +28,9 @@
SerialMuxSel(1);
ret += ZPH01_Init();
+ SerialMuxSel(2);
+ //ret += ESP01_Init();
+
SerialMuxSel(3);
ret += ZE08_Init();
return ret;