查看: 337|回复: 0

物联网项目-智能终端程序

[复制链接]

13

主题

22

帖子

323

积分

版主

Rank: 7Rank: 7Rank: 7

积分
323
发表于 2023-4-20 14:10:57 | 显示全部楼层 |阅读模式
本帖最后由 hzxc 于 2023-9-17 23:37 编辑

室内环境实时监测系统(请勿点击代码末尾“复制代码”,手动选中程序进行复制,到BXY中修改并烧录程序)
  1. #***************WIFI模块内部代码*************
  2. class Obloq(object):
  3.     def read_until(self, min_num_bytes, ending, timeout=10):
  4.         timeout_count = 0
  5.         while not uart.any():
  6.             if timeout_count >= 1000 * timeout:
  7.                 return ''
  8.             sleep(1)
  9.             timeout_count += 1
  10.         data = str(uart.read(min_num_bytes), 'UTF-8')
  11.         while timeout_count < 1000 * timeout:
  12.             if type(ending) == str:
  13.                 if data.endswith(ending):
  14.                     break
  15.             elif type(ending) == list:
  16.                 end = False
  17.                 for i in ending:
  18.                     if data.endswith(i):
  19.                         end = True
  20.                         break
  21.                 if end:
  22.                     break
  23.             if uart.any():
  24.                 new_data = str(uart.read(min_num_bytes), 'UTF-8')
  25.                 data += new_data
  26.                 timeout_count = 0
  27.             else:
  28.                 sleep(1)
  29.                 timeout_count += 1
  30.         return data

  31.     def exit_raw_repl(self):
  32.         uart.write('+++')
  33.         data = self.read_until(1, '+++', 1)
  34.         if data == '':
  35.             pass
  36.         elif not data.endswith('+++'):
  37.             return False
  38.         self.in_raw_repl = False
  39.         return True

  40.     error_msg1 = 'wifi module not detected'
  41.     error_msg2 = '...' #disconnect from USB wire & restart haoda:bit
  42.     in_raw_repl = True
  43.     def connectWifi(self, SSID, PASSWORD, TIMEOUT=10000):
  44.         if self.in_raw_repl:
  45.             while not self.exit_raw_repl():
  46.                 pass
  47.         uart.write('AT+RST\r\n')
  48.         try:
  49.             data = self.read_until(256, 'ready\r\n', 5)
  50.         except:
  51.             return False
  52.         if data == '':
  53.             display.scroll(self.error_msg1)
  54.             return False
  55.         elif not data.endswith('ready\r\n'):
  56.             display.scroll(self.error_msg2)
  57.             return False
  58.         uart.write('AT+CWMODE_CUR=3\r\n')
  59.         data = self.read_until(1, 'OK\r\n', 1)
  60.         if not data.endswith('OK\r\n'):
  61.             display.scroll(self.error_msg2)
  62.             return False
  63.         #设置Wi-Fi模块连接无线网络
  64.         uart.write('AT+CWJAP_CUR="%s","%s"\r\n' %(SSID, PASSWORD))
  65.         display.scroll('wait...')
  66.         data = self.read_until(1, ['OK\r\n', 'FAIL\r\n'], TIMEOUT / 1000)
  67.         if data.endswith('OK\r\n') and data.find('WIFI GOT I') > -1:
  68.             pass
  69.         elif data.endswith('FAIL\r\n'):
  70.             if data.find('WIFI CONNECTED') > -1:
  71.                 display.scroll('dhcp not available / ip conflict')
  72.                 return False
  73.             else:
  74.                 display.scroll('check wifi ssid / password')
  75.                 return False
  76.         else:
  77.             display.scroll(self.error_msg2)
  78.             return False
  79.         return True

  80.     def ifconfig(self, retry=10):
  81.         if self.in_raw_repl:
  82.             return 'cannot get IP in raw mode'
  83.         retry_count = 0
  84.         while retry_count < retry:
  85.             #设置这个后 读串口返回绑定IP
  86.             uart.write('AT+CIFSR\r\n')
  87.             data = self.read_until(64, 'OK\r\n', 2)
  88.             if not data.endswith('OK\r\n'):
  89.                 display.scroll(self.error_msg2)
  90.             elif data.find('STAIP') > -1:
  91.                 temp = data.split('"')
  92.                 if len(temp) > 5:
  93.                     ip_address = temp[5]
  94.                     return ip_address
  95.                 retry_count += 1
  96.             else:
  97.                 retry_count += 1
  98.         return 'IP Error'

  99.     def httpSet(self, IP, PORT):
  100.         if self.in_raw_repl:
  101.             while not self.exit_raw_repl():
  102.                 pass
  103.         while not self.in_raw_repl:
  104.             uart.write('AT+CIPSTART="TCP","%s",%s\r\n' %(IP, PORT))
  105.             data = self.read_until(1, ['CONNECT\r\n\r\nOK\r\n', 'ERROR\r\nCLOSED\r\n'], 6)
  106.             if data.endswith('ERROR\r\nCLOSED\r\n'):
  107.                 display.scroll('server offline')
  108.                 continue
  109.             elif not data.endswith('CONNECT\r\n\r\nOK\r\n'):
  110.                 display.scroll(self.error_msg2)
  111.                 continue
  112.             #设置WIFI模块为透传模式
  113.             uart.write('AT+CIPMODE=1\r\n')
  114.             data = self.read_until(1, 'OK\r\n', 0.5)
  115.             if not data.endswith('OK\r\n'):
  116.                 display.scroll(self.error_msg2)
  117.                 continue
  118.             #在透传模式下开始发送数据
  119.             uart.write('AT+CIPSEND\r\n')
  120.             data = self.read_until(1, 'OK\r\n\r\n>', 3)
  121.             if not data.endswith('OK\r\n\r\n>'):
  122.                 display.scroll(self.error_msg2)
  123.                 continue
  124.             self.in_raw_repl = True
  125.         return True

  126.     def get(self, url, TIMEOUT):
  127.         uart.write('GET /' + url + '\r\n\r\n')
  128.         #data = self.read_until(1, '', TIMEOUT / 1000)
  129.         timeout_count = 0
  130.         while not uart.any():
  131.             if timeout_count >= TIMEOUT:
  132.                 return (404, 'Not Found')
  133.             sleep(1)
  134.             timeout_count += 1
  135.         data = str(uart.read(), 'UTF-8')
  136.         if data == '':
  137.             pass
  138.         elif not data.endswith('ERROR\r\n'):
  139.             return (200, data)
  140.         return (404, 'Not Found')

  141. Obloq = Obloq()
  142. #*************************************************
  143. from microbit import *
  144. #LM35连接在pin2
  145. #设置服务器地址和端口
  146. IP="192.168.1.10"
  147. PORT="8080"
  148. #设置当前环境网络账号和密码
  149. SSID="my_wifi"
  150. PASSWORD="1234"
  151. #设置串口引脚,连接到wifi模块,好搭Bit发送在pin12(接模块R),接收在pin8(接模块T)
  152. uart.init(baudrate=115200, bits=8, parity=None, stop=1, tx=pin12, rx=pin8)

  153. while Obloq.connectWifi(SSID,PASSWORD,10000) != True:
  154.     display.show(".")
  155. #点阵屏显示wifi module not detected,未检测到wifi模块,可能是wifi模块未连接、引脚设置错误或连接线接触不良等原因

  156. display.scroll(Obloq.ifconfig()) #显示连上无线网络后wifi模块获取到的IP
  157. Obloq.httpSet(IP,PORT)
  158. #点阵屏显示server offline,可能是服务器未开启、防火墙阻挡或无线网络需要认证等原因,使用手机尝试打开网页http://(IP):(PORT)

  159. while True:
  160.     errno,resp = Obloq.get("input?id=1&val=" + str("%.1f"%(pin2.read_analog()*3.3/10.24)), 10000)
  161.     if errno == 200:
  162.         display.scroll(resp)
  163.     else:
  164.         display.scroll(str(errno))
  165.     sleep(1000*5)
复制代码
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-4-18 16:25 , Processed in 0.322590 second(s), 22 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表