6614浏览
查看: 6614|回复: 11

[项目] 智慧社区气象监测系统

[复制链接]
开场白:
物联网是一种应时代而生的产物,它集中了传统硬件稳定与互联网络高速的优点,满足当代人们对快速生活节奏的要求。
随着城市的发展,空气质量让人担忧。尤其是生在长在京都的我们,一次次的pm2.5爆表冲击着我们的心脏。时代变了,对健康的追求没变,生命的脆弱令我们更感其珍贵。
智慧社区气象站,实时掌控身边的空气状况,自己空气自己做主。

系统设计:

硬件框图:

测试结果:
序号
测试项目
测试内容与要求
测试结论
1
一般外观与要求
A
整套设备按规定程序及批准的图样和技术文件制造。
合格
B
全部电子线路、接插件、电线电缆应焊接牢靠,不得有脱焊、虚焊等现象。
合格
C
整机各部件安装应正确、牢固可靠,操作灵活,不应有迟滞、卡死、松脱、变形等缺陷。
合格
D
整机各部件均有防护设计,关键部件应有防潮、防辐射、防腐蚀设计。
合格
E
外观
合格
2
电源适应性
A
在180V-240V条件下能正常工件。
合格
B
交直流两用,能交直流自动浮充切换。
合格
3
抗干扰性
具有一定抗干扰和抗电磁辐射能力。
合格
4
气压
士0. 3hpa
合格
5
气温
士0.2℃
合格
6
湿敏电容
士4%RH(< 80%RH时)
合格
士8%RH(士80%RH时)
合格
7
雨量
士0.4mm(≤10mm)
合格
士4%(>10mm)
合格
实物展示:
室外:

室内:

室内终端减少不必要模块降低成本,网线供网市电供能,更加稳定。
智能家居:

室内外监控设备共同组成智慧社区监控系统,根据差值为用户提供短信提示,用户可根据需求远程遥控家具开关。
数据曲线:

细颗粒物

气压

光照
还有温湿度降水等。因为曲线不好看就不挂了。

微信查询功能:

微博整点播报:

短信报警:

结束语:
智慧社区气象系统不仅仅是概念,我们做的是健康的态度。对暴露在严重空气污染下的社区生活说不,打造全新的智慧社区理念,健康的生活环境,为身在城市中的人们打造最后一片安居净土!

附录:
室外社区气象站




  1. #include <SPI.h>
  2. #include <Wire.h>
  3. #include <math.h>
  4. #include <MsTimer2.h>
  5. #include <Adafruit_BMP085.h>
  6. #include <dht.h>  
  7. #define DHT11_PIN 6//put the sensor in the digital pin 4
  8. Adafruit_BMP085 bmp;
  9. int BH1750address = 0x23;//BH1750 I2C地址
  10. byte buff[2];
  11. int val;
  12. int va;
  13. int flag = 0;//定时中断标志
  14. int hm=1;
  15. #define POST_INTERVAL (10*1000)
  16. int pin = 7;
  17. unsigned long duration;
  18. unsigned long starttime;
  19. unsigned long sampletime_ms = 30000;
  20. unsigned long lowpulseoccupancy = 0;
  21. float ratio = 0;
  22. float concentration = 0;  
  23. dht DHT;  
  24. void timer()//定时中断函数
  25. {
  26.   flag = 1;
  27. }
  28. void setup()
  29. {
  30.    // start serial port:
  31.    Serial.begin(9600);
  32.    Wire.begin();
  33.   MsTimer2::set(2000, timer); //定时器设置,每2秒触发一次timer函数操作
  34.   MsTimer2::start();
  35.   bmp.begin();                 //初始化气压计
  36.   pinMode(2, INPUT);
  37.   pinMode(6, INPUT);
  38.     pinMode(7, INPUT);
  39.       starttime = millis();
  40. }
  41. void loop() {
  42.    // read the analog sensor:
  43.    //int sensorReading = analogRead(A0);  
  44.   // if there's incoming data from the net connection.
  45.    // send it out the serial port.  This is for debugging
  46.    // purposes only:
  47. int chk = DHT.read22(DHT11_PIN);
  48. int a=1;
  49. while(a)
  50. {
  51.   duration = pulseIn(pin, LOW);
  52.   lowpulseoccupancy = lowpulseoccupancy+duration;
  53.   if ((millis()-starttime) > sampletime_ms)
  54.   {
  55.     ratio = lowpulseoccupancy/(sampletime_ms*10.0);  // Integer percentage 0=>100
  56.     concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
  57.     //Serial.print(lowpulseoccupancy);
  58.     lowpulseoccupancy = 0;
  59.     starttime = millis();
  60.     a=0;
  61.   }
  62. }
  63. float temp = bmp.readTemperature();             //读取温度数据 (BMP085)
  64.   long pa = bmp.readPressure();   //读取气压数据 (BMP085)
  65. float hpa = pa /100.0 ;           //将Pa换算成hPa
  66. val=digitalRead(2);
  67. va=analogRead(0);
  68. int lux=BH1750();
  69. int con=concentration;
  70. float h=DHT.humidity;
  71. float tem=DHT.temperature;
  72. int bmp=hpa;
  73.   String tempstring3="@key=37435×××××××××××21834d4d";
  74.     String tempstring1=")";
  75.     if(hm==1)
  76.     {
  77.     Serial.println(tempstring3);
  78.     hm=0;
  79.     delay(10000);   
  80.     }
  81.     Serial.print("@up(01,06,");
  82.     Serial.print("bmp=");
  83.     Serial.print(bmp);
  84.    // Serial.print(",bmpt=");
  85.    // Serial.print(temp);
  86.     //Serial.print(",ra=");
  87.    // Serial.print(ratio);
  88.     Serial.print(",yudi=");
  89.     Serial.print(va);
  90.     Serial.print(",yd=");
  91.     Serial.print(val);
  92.     Serial.print(",lux=");
  93.     Serial.print(lux);
  94.     Serial.print(",t11=");
  95.     Serial.print(h);
  96.     Serial.print(",temp=");
  97.     Serial.print(tem);
  98.   //  Serial.print(",con=");
  99.   //  Serial.print(con);  
  100.     Serial.print(")");  
  101.     Serial.println("");
  102. //    delay(12000); min transtime
  103.     delay(55000);
  104.    /* Serial.print("@up(01,04,");
  105.     Serial.print("bmp=");
  106.     Serial.print("1000");
  107.     Serial.print(",yudi=");
  108.     Serial.print("1024");
  109.     Serial.print(",yd=");
  110.     Serial.print("1");
  111.     Serial.print(",lux=");
  112.     Serial.print("13.55");
  113.     Serial.print(")");
  114.     Serial.println();
  115.       delay (30000);
  116.    
  117.     Serial.print("@up(01,04");
  118.     Serial.print(",t11=");
  119.     Serial.print("30");
  120.     Serial.print(",temp=");
  121.     Serial.print("29");
  122.     Serial.print(",con=");
  123.     Serial.print("1000");  
  124.     Serial.print(",ra=");
  125.     Serial.print("2.00");  
  126.     Serial.print(")");
  127.     Serial.println();
  128.       delay (5000);
  129.       digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  130.       delay (55000);
  131.       */
  132.       /*if (lwc) {
  133.    // Serial.print("*** start data collection ");
  134.     lwc->append("bmpt", temp);
  135.     lwc->append("bmp", hpa);
  136.     lwc->append("yudi", va);
  137.     lwc->append("yd", val);
  138.     lwc->append("lux", BH1750());
  139.     lwc->append("011", DHT.humidity);
  140.     lwc->append("temp", DHT.temperature);
  141.     lwc->append("con", concentration);
  142.     lwc->append("ra", ratio);
  143.     Serial.print("*** start either net send ");
  144.     lwc->send();
  145.     Serial.print("*** stop either net send ");
  146.    delay(POST_INTERVAL);
  147.    }*/
  148. }
  149. double BH1750() //BH1750设备操作
  150. {
  151.   int i=0;
  152.   double  val=0;
  153.   //开始I2C读写操作
  154.   Wire.beginTransmission(BH1750address);
  155.   Wire.write(0x10);//1lx reolution 120ms//发送命令
  156.   Wire.endTransmission();  
  157.   delay(200);
  158.   //读取数据
  159.   Wire.beginTransmission(BH1750address);
  160.   Wire.requestFrom(BH1750address, 2);
  161.   while(Wire.available()) //
  162.   {
  163.     buff = Wire.read();  // receive one byte
  164.     i++;
  165.   }
  166.   Wire.endTransmission();
  167.   if(2==i)
  168.   {
  169.    val=((buff[0]<<8)|buff[1])/1.2;
  170.   }
  171.   return val;
  172. }
复制代码
  1. #include <dht.h>  
  2. #include <MsTimer2.h>
  3. #include <Wire.h>
  4. #include <Adafruit_BMP085.h>
  5. int pin = 7;
  6. unsigned long duration;
  7. unsigned long starttime;
  8. unsigned long sampletime_ms = 30000;
  9. unsigned long lowpulseoccupancy = 0;
  10. float ratio = 0;
  11. float concentration = 0;  
  12. dht DHT;  
  13. #define DHT11_PIN 6//put the sensor in the digital pin 4  
  14. #include <LeweiClient.h>
  15. #include <SPI.h>
  16. #include <Ethernet.h>  
  17.   #define POST_INTERVAL (10*1000)
  18. Adafruit_BMP085 bmp;
  19. int BH1750address = 0x23;//BH1750 I2C地址
  20. byte buff[2];
  21. LeWeiClient *lwc;
  22. const unsigned long postingInterval = 10*1000;
  23. #define LW_USERKEY "374358e×××××××××××××34d4d"
  24. #define LW_GATEWAY "02"
  25. int flag = 0;//定时中断标志
  26. void timer()//定时中断函数
  27. {
  28.   flag = 1;
  29. }
  30. void setup()  
  31. {  
  32.     Serial.begin(9600);
  33.   pinMode(pin,INPUT);
  34.   starttime = millis();
  35.   lwc = new LeWeiClient(LW_USERKEY, LW_GATEWAY);
  36.      Wire.begin();
  37.        MsTimer2::set(2000, timer); //定时器设置,每2秒触发一次timer函数操作
  38.   MsTimer2::start();
  39.   bmp.begin();                 //初始化气压计
  40.   pinMode(6, INPUT);
  41. }  
  42. void loop()  
  43. {  
  44.     int chk = DHT.read22(DHT11_PIN);
  45. int a=1;
  46. while(a)
  47. {
  48. duration = pulseIn(pin, LOW);
  49.   lowpulseoccupancy = lowpulseoccupancy+duration;
  50.   if ((millis()-starttime) > sampletime_ms)
  51.   {
  52.     ratio = lowpulseoccupancy/(sampletime_ms*10.0);  // Integer percentage 0=>100
  53.     concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
  54.     //Serial.print(lowpulseoccupancy);
  55.     lowpulseoccupancy = 0;
  56.     starttime = millis();
  57.     a=0;
  58.   }
  59. }
  60.   float temp = bmp.readTemperature();             //读取温度数据 (BMP085)
  61.   long pa = bmp.readPressure();   //读取气压数据 (BMP085)
  62. float hpa = pa /100.0 ;           //将Pa换算成hPa
  63. if (lwc) {
  64.    // Serial.print("*** start data collection ");
  65.     lwc->append("temp", temp);
  66.     lwc->append("bmp", hpa);
  67.     lwc->append("T1", DHT.humidity);
  68.     lwc->append("T2", DHT.temperature);
  69.     lwc->append("DSM", concentration);
  70.     lwc->append("ds", ratio);
  71.     Serial.print("*** start either net send ");
  72.     lwc->send();
  73.     Serial.print("*** stop either net send ");
  74.    delay(POST_INTERVAL);
  75.    }
  76. }
复制代码

家具控制:开窗+开空调模型




  1. #include <SPI.h>
  2. #include <Ethernet.h>
  3. #include <LeweiTcpClient.h>
  4. #include <EEPROM.h>
  5. #define LW_USERKEY "37435×××××××××××××4d4d"
  6. #define LW_GATEWAY "03"
  7. #define LED_PIN 3//plug led in the d3,gnd->gnd
  8. #define kt_PIN 5
  9. int Pin0 = 8;
  10. int Pin1 = 9;
  11. int Pin2 = 6;
  12. int Pin3 = 7;
  13. int _step = 0;
  14. int a=0,m=0,l=1,x=0,y=0,h;
  15. //byte mac[] = {0x74,0x69,0x69,0x2D,0x30,0x31};
  16. //IPAddress ip(192,168,1, 15);
  17. //IPAddress mydns(8,8,8,8);
  18. //IPAddress gw(192,168,1,1);
  19. //IPAddress subnet(255,255,255,0);
  20. LeweiTcpClient *client;
  21. void setup()
  22. {
  23.   Serial.begin(9600);
  24.   //you can use 3 ways to init your network
  25.   //1.simplest
  26.   pinMode(Pin0, OUTPUT);
  27.   pinMode(Pin1, OUTPUT);
  28.   pinMode(Pin2, OUTPUT);
  29.   pinMode(Pin3, OUTPUT);
  30.   pinMode(3, OUTPUT);
  31.   pinMode(4, OUTPUT);
  32.   pinMode(5, OUTPUT);
  33.   pinMode(13, INPUT);
  34.   client = new LeweiTcpClient(LW_USERKEY, LW_GATEWAY);
  35.   //2.full setting for your network
  36.   //client = new LeweiTcpClient(LW_USERKEY, LW_GATEWAY,mac,ip,mydns,gw,subnet);
  37.   //test1 is the function you write below to handle your program
  38.   //"testFunction" is the function name you set on website:[url=http://www.lewei50.com/]http://www.lewei50.com/[/url]
  39.   //on "controll command manager" menu
  40.   //we test transfer 1-5 para from website(you defined on it) to your Arduino
  41.   //enjoy it
  42.   UserFunction uf1(functionIWrote,"functionNameDefinedOnWeb");
  43.   client->addUserFunction(uf1);
  44.   UserFunction uf2 (ledOn,"turnLedOn");
  45.   client->addUserFunction(uf2);
  46.   UserFunction uf3 (ledOff,"turnLedOff");
  47.   client->addUserFunction(uf3);
  48.   UserFunction uf4 (ktOn,"turnktOn");
  49.   client->addUserFunction(uf4);
  50.   UserFunction uf5 (ktOff,"turnktOff");
  51.   client->addUserFunction(uf5);
  52.   /*
  53.   enable easySetupMode will open the port 80 of this board,
  54.   you can setup your apikey and gateway number via http://your_arduino_ip/
  55.   the key and number will be burned into board's eeprom
  56.   after setting you need to restart your arduino.
  57.   after reboot,you can comment this line for fasten your board.
  58.   this library will will use apikey and gateway number in eeprom FIRST,if it exsit.
  59.   you can send empty value from the browser to wipe the data in eeprom.
  60.   */
  61.   //client->easySetupMode(true);
  62.   pinMode(LED_PIN, OUTPUT);
  63. }
  64. void loop()
  65. {
  66.     client->keepOnline();
  67.    switch(_step){
  68.     case 0:
  69.       digitalWrite(Pin0, LOW);
  70.       digitalWrite(Pin1, HIGH);
  71.       digitalWrite(Pin2, HIGH);
  72.       digitalWrite(Pin3, HIGH);
  73.     break;
  74.     case 1:
  75.       digitalWrite(Pin0, LOW);
  76.       digitalWrite(Pin1, LOW);
  77.       digitalWrite(Pin2, HIGH);
  78.       digitalWrite(Pin3, HIGH);
  79.     break;
  80.     case 2:
  81.       digitalWrite(Pin0, HIGH);
  82.       digitalWrite(Pin1, LOW);
  83.       digitalWrite(Pin2, HIGH);
  84.       digitalWrite(Pin3, HIGH);
  85.     break;
  86.     case 3:
  87.       digitalWrite(Pin0, HIGH);
  88.       digitalWrite(Pin1, LOW);
  89.       digitalWrite(Pin2, LOW);
  90.       digitalWrite(Pin3, HIGH);
  91.     break;
  92.     case 4:
  93.       digitalWrite(Pin0, HIGH);
  94.       digitalWrite(Pin1, HIGH);
  95.       digitalWrite(Pin2, LOW);
  96.       digitalWrite(Pin3, HIGH);
  97.     break;
  98.     case 5:
  99.       digitalWrite(Pin0, HIGH);
  100.       digitalWrite(Pin1, HIGH);
  101.       digitalWrite(Pin2, LOW);
  102.       digitalWrite(Pin3, LOW);
  103.     break;
  104.       case 6:
  105.       digitalWrite(Pin0, HIGH);
  106.       digitalWrite(Pin1, HIGH);
  107.       digitalWrite(Pin2, HIGH);
  108.       digitalWrite(Pin3, LOW);
  109.     break;
  110.     case 7:
  111.       digitalWrite(Pin0, LOW);
  112.       digitalWrite(Pin1, HIGH);
  113.       digitalWrite(Pin2, HIGH);
  114.       digitalWrite(Pin3, LOW);
  115.     break;
  116.     default:
  117.       digitalWrite(Pin0, LOW);
  118.       digitalWrite(Pin1, LOW);
  119.       digitalWrite(Pin2, LOW);
  120.       digitalWrite(Pin3, LOW);
  121.     break;
  122.   }
  123.   if(l==LOW)
  124.   {
  125.     y=0;
  126.     _step++;
  127.   if(_step>7){
  128.     if(x<65)
  129.     {
  130.     _step=0;
  131.     x++;
  132.     }
  133.     else
  134.     {
  135.     }
  136.   }
  137.   }
  138. else if(m==HIGH)
  139. {
  140.    x=0;
  141.     _step--;
  142.   if(_step<1){
  143.         if(y<65)
  144.     {
  145.     _step=7;
  146.     y++;
  147.     }
  148.     else
  149.     {
  150.     }
  151.   }
  152.   }
  153.     delay(10);
  154. }
  155. //function functionIWrote use 1 parameter,on the website,it point to "p1"
  156. void functionIWrote(char * p1)
  157. {
  158.   client->setRevCtrlMsg("true","message to server");
  159. //  client->sendSensorValue("tcp1",pi);
  160.   Serial.println(p1);
  161. }
  162. //function without parameter
  163. void ledOn()
  164. {
  165.   client->setRevCtrlMsg("true","on");
  166.   digitalWrite(LED_PIN,LOW);
  167.   l=LOW;
  168.   m=LOW;
  169. }
  170. void ledOff()
  171. {
  172.   client->setRevCtrlMsg("true","off");
  173.   digitalWrite(LED_PIN,HIGH);
  174.   m=HIGH;
  175.   l=HIGH;
  176. }
  177. void ktOn()
  178. {
  179.   client->setRevCtrlMsg("true","kton");
  180.   digitalWrite(kt_PIN,HIGH);
  181.   digitalWrite(4,HIGH);
  182. }
  183. void ktOff()
  184. {
  185.   client->setRevCtrlMsg("true","ktoff");
  186.   digitalWrite(kt_PIN,LOW);
  187.     digitalWrite(4,LOW);
  188. }
复制代码



dsweiliang  初级技神

发表于 2015-11-5 21:51:27

好厉害的样子
回复

使用道具 举报

孙毅  初级技匠

发表于 2015-11-5 22:29:25

来来,我们版聊会儿
回复

使用道具 举报

丄帝De咗臂  高级技匠

发表于 2015-11-6 07:12:29

孙毅 发表于 2015-11-5 22:29
来来,我们版聊会儿

版聊干啥
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-11-6 09:37:03


你们都可以试着做做看
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-11-6 09:37:22

孙毅 发表于 2015-11-5 22:29
来来,我们版聊会儿

聊啥 昨晚两点才睡
回复

使用道具 举报

孙毅  初级技匠

发表于 2015-11-6 13:24:06


随便啥,比如这个东东能不能转化成产品啊?嘻嘻
回复

使用道具 举报

孙毅  初级技匠

发表于 2015-11-6 13:24:27

大连林海 发表于 2015-11-6 09:37
聊啥 昨晚两点才睡

失眠了又?又被校长搞了?
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-11-6 15:30:34

孙毅 发表于 2015-11-6 13:24
失眠了又?又被校长搞了?

反正谁都能被搞
回复

使用道具 举报

hnyzcj  版主

发表于 2015-11-9 07:32:24

孙毅 发表于 2015-11-6 13:24
失眠了又?又被校长搞了?

大肾过去帮他搞校长
回复

使用道具 举报

阿凯同学  学徒

发表于 2017-5-16 18:59:46

请问一下,编程使用的是哪种语言
回复

使用道具 举报

阿凯同学  学徒

发表于 2017-5-19 15:58:46

Arduino:1.8.2 (Windows 7), 开发板:"Arduino/Genuino Uno"

sketch_may19a:25: error: 'LeweiTcpClient' does not name a type

LeweiTcpClient *client;

^

C:\Users\Administrator\Documents\Arduino\sketch_may19a\sketch_may19a.ino: In function 'void setup()':

sketch_may19a:41: error: 'client' was not declared in this scope

   client = new LeweiTcpClient(LW_USERKEY, LW_GATEWAY);

   ^

sketch_may19a:41: error: expected type-specifier before 'LeweiTcpClient'

   client = new LeweiTcpClient(LW_USERKEY, LW_GATEWAY);

                ^

sketch_may19a:52: error: 'UserFunction' was not declared in this scope

   UserFunction uf1(functionIWrote,"functionNameDefinedOnWeb");

   ^

sketch_may19a:53: error: 'uf1' was not declared in this scope

   client->addUserFunction(uf1);

                           ^

sketch_may19a:54: error: expected ';' before 'uf2'

   UserFunction uf2 (ledOn,"turnLedOn");

                ^

sketch_may19a:55: error: 'uf2' was not declared in this scope

   client->addUserFunction(uf2);

                           ^

sketch_may19a:56: error: expected ';' before 'uf3'

   UserFunction uf3 (ledOff,"turnLedOff");

                ^

sketch_may19a:57: error: 'uf3' was not declared in this scope

   client->addUserFunction(uf3);

                           ^

sketch_may19a:58: error: expected ';' before 'uf4'

   UserFunction uf4 (ktOn,"turnktOn");

                ^

sketch_may19a:59: error: 'uf4' was not declared in this scope

   client->addUserFunction(uf4);

                           ^

sketch_may19a:60: error: expected ';' before 'uf5'

   UserFunction uf5 (ktOff,"turnktOff");

                ^

sketch_may19a:61: error: 'uf5' was not declared in this scope

   client->addUserFunction(uf5);

                           ^

C:\Users\Administrator\Documents\Arduino\sketch_may19a\sketch_may19a.ino: In function 'void loop()':

sketch_may19a:78: error: 'client' was not declared in this scope

     client->keepOnline();

     ^

C:\Users\Administrator\Documents\Arduino\sketch_may19a\sketch_may19a.ino: In function 'void functionIWrote(char*)':

sketch_may19a:176: error: 'client' was not declared in this scope

   client->setRevCtrlMsg("true","message to server");

   ^

C:\Users\Administrator\Documents\Arduino\sketch_may19a\sketch_may19a.ino: In function 'void ledOn()':

sketch_may19a:185: error: 'client' was not declared in this scope

   client->setRevCtrlMsg("true","on");

   ^

C:\Users\Administrator\Documents\Arduino\sketch_may19a\sketch_may19a.ino: In function 'void ledOff()':

sketch_may19a:192: error: 'client' was not declared in this scope

   client->setRevCtrlMsg("true","off");

   ^

C:\Users\Administrator\Documents\Arduino\sketch_may19a\sketch_may19a.ino: In function 'void ktOn()':

sketch_may19a:199: error: 'client' was not declared in this scope

   client->setRevCtrlMsg("true","kton");

   ^

C:\Users\Administrator\Documents\Arduino\sketch_may19a\sketch_may19a.ino: In function 'void ktOff()':

sketch_may19a:205: error: 'client' was not declared in this scope

   client->setRevCtrlMsg("true","ktoff");

   ^

exit status 1
'LeweiTcpClient' does not name a type

在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail