lpc824lite 采集温湿度压强数据显示至oled12864,通w5500与用户进行TCP交互

Dependencies:   mbed WIZnet_Library AM2320 BME280

Revision:
0:ef802f772981
Child:
1:cc2094da451b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu May 11 16:51:19 2017 +0000
@@ -0,0 +1,186 @@
+#include "mbed.h"
+DigitalIn button(P0_1, PullUp); //按键myled3改变状态
+//adc采集电压函数
+float meas;    
+long ADC_VALUE[3]; 
+AnalogIn ADC_MQ2(P0_6);       //ADC1,MQ2空气质量检测
+AnalogIn ADC_MQ3(P0_14);      //ADC2,MQ2空气质量检测
+AnalogIn analog_value(P0_23); // ADC3,可调电位器
+
+void adc_data()
+{
+        meas = ADC_MQ2.read(); 
+        ADC_VALUE[0] = (long)(meas * 3300);       
+        meas = ADC_MQ3.read(); 
+        ADC_VALUE[1] = (long)(meas * 3300); 
+        meas = analog_value.read();
+        ADC_VALUE[2] = (long)(meas * 3300);      
+}
+
+//oled显示函数
+#include "CriusOLED.h"
+DigitalOut myled1(P0_27);
+DigitalOut myled2(P0_13);
+DigitalOut myled3(P0_17);  //用户led
+Ticker ticker;
+float sampleTime = 1.0;
+long times;
+char buffer1[40];
+char buffer2[20];
+char buffer3[20];
+char Buffer[100];
+#define  bufferclear  "                "
+void am2320_dat();
+void bme280_dat();
+void Tlink_Tcp();
+void oled_ticker() 
+{
+        //每隔一秒显示一次
+        myled1=!myled1;
+        if(!button)
+        myled3=!myled3;
+        adc_data();
+        sendStrXY(bufferclear,1,0);  
+        snprintf(buffer1,sizeof(buffer1), "%ds %dmV %dmV %dmV",times++,ADC_VALUE[0],ADC_VALUE[1],ADC_VALUE[2]); 
+        sendStrXY(buffer1,0,0);  
+        am2320_dat();
+        bme280_dat();
+}
+
+void oled_init()
+{
+    i2c.frequency(400000);
+    init_OLED();
+    displayOn();
+    reset_display(); 
+    ticker.attach(&oled_ticker, sampleTime);  
+}
+
+//AM2320初始化
+#include  "AM2320.h"
+AM2320 am2320(i2c);
+int h;
+int t;
+void am2320_dat()
+{
+    h = am2320.humidity();
+    t = am2320.temperature();
+    snprintf(buffer2,sizeof(buffer2), "%2d.%dc %2d.%d%%",t/10,t%10,h/10,h%10);
+    sendStrXY(buffer2,4,0); 
+}
+
+#include "BME280.h"
+BME280 sensor(I2C_SDA, I2C_SCL);
+void bme280_dat()
+{
+  snprintf(buffer3,sizeof(buffer3), "%2.2fC %6.0fPa",sensor.getTemperature(), sensor.getPressure()*100); 
+  sendStrXY(buffer3,5,0); 
+}
+
+Serial pc(P0_4,P0_0,921600);
+//w5500初始化函数
+#include "WIZnetInterface.h"
+#define USE_DHCP    1
+
+#define LOOPBACKPORT    80
+char * IP_Addr    = "192.168.0.194";
+char * IP_Subnet  = "255.255.255.0";
+char * IP_Gateway = "192.168.0.1";
+unsigned char MAC_Addr[6] = {0x00,0x08,0xDC,0x12,0x34,0x56};
+
+
+SPI spi(P0_26,P0_25,P0_24);
+WIZnetInterface ethernet(&spi,P0_16,P0_5);
+
+void W5500_init()
+{
+        #if USE_DHCP
+        int ret = ethernet.init(MAC_Addr);
+        #else
+        int ret = ethernet.init(MAC_Addr,IP_Addr,IP_Subnet,IP_Gateway);
+        #endif
+        myled2=1; 
+        if (!ret) {
+            pc.printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress());
+            ret = ethernet.connect();
+            if (!ret) {
+                pc.printf("IP: %s, MASK: %s, GW: %s\r\n",
+                          ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway());
+                sendStrXY("IP:",2,0); 
+                sendStrXY(ethernet.getIPAddress(),2,3);            
+            } else {
+                pc.printf("Error ethernet.connect() - ret = %d\r\n", ret);
+                exit(0);
+            }
+        } else {
+            pc.printf("Error ethernet.init() - ret = %d\r\n", ret);
+            exit(0);
+        }       
+}
+
+void w5500_httpserver()
+{
+  char buffer[128];
+  W5500_init();
+  TCPSocketServer server;    
+  server.bind(LOOPBACKPORT);
+  server.listen();
+  while (1) {
+            pc.printf("\nWait for new connection...\r\n");
+            TCPSocketConnection client;
+            server.accept(client);
+            client.set_blocking(false, 0); 
+            pc.printf("Connection from: %s\r\n", client.get_address());
+            sendStrXY("C:",3,0);  
+            sendStrXY(client.get_address(),3,3); 
+            while (client.is_connected() == true) {
+                myled2=0;  
+                int n = client.receive(buffer, sizeof(buffer));
+                if(n > 0)
+                {
+                    //client.send_all(buffer, n); //将接受的数据发送回去
+                    if(strstr(buffer,"AD"))
+                      client.send(buffer1, sizeof(buffer1));  
+                    
+                    if(strstr(buffer,"AM"))
+                      client.send_all(buffer2, sizeof(buffer2));                      
+ 
+                    if(strstr(buffer,"BE"))
+                      client.send(buffer3, sizeof(buffer3));  
+                    
+                    if(strstr(buffer,"LED"))
+                      myled3=!myled3;
+                    
+                    if(strstr(buffer,"ALL"))
+                    {
+                        snprintf(Buffer,sizeof(Buffer), " %s\r\n %s\r\n %s\r\n ledstatus:%d\r\n",buffer1,buffer2,buffer3,!myled3);
+                        client.send(Buffer, sizeof(Buffer));                     
+                    }                              
+
+                    if(strstr(buffer,"IP"))
+                    {
+                        snprintf(Buffer,sizeof(Buffer), " MAC_Addr: %s\r\n LocalIp: %s\r\n ClientIp: %s\r\n",ethernet.getMACAddress(),ethernet.getIPAddress(),client.get_address());
+                        client.send(Buffer, sizeof(Buffer));                     
+                    }                                                            
+                }
+                if(client.is_fin_received())
+                    client.close();
+            }
+            pc.printf("Disconnected.\r\n");
+            sendStrXY(bufferclear,3,0); 
+            //sendStrXY(bufferclear,7,0); 
+            myled2=1; 
+        }   
+}
+
+
+
+int main() {   
+    pc.printf("Start\r\n");
+    oled_init();
+    wait(5);
+    while(1)
+    {
+      w5500_httpserver();
+    }
+}