沧海笑 发表于 2017-6-18 23:23:48

一步一步使用uPyCraft学习MicroPython之TCP上送温度至物联网

本帖最后由 沧海笑 于 2017-6-18 23:26 编辑

【一步一步使用uPyCraft学习MicroPython之TCP上送温度物联网】【本期主要内容】上一期我们一起初步了解了uPyCraft这个很棒的IDE,学习用uPyCraft及其官方例题,修改了一个实用的小程序,用MicroPython 之UPD控制LED灯。本期我们继续深入学习MicroPython。将esp32设置为TCP client,采集LM35,将温度上送至物联网(我们继续使用tlink.io)
好吧,现在我们就开始学习之旅。 【硬件准备】
品名数量备注
FireBeetle Board-ESP321

FireBeetleCovers-Gravity Adapter Board1

Ssd1306 oled屏1I2C接口
LM351温度传感器
杜邦线7



【软件准备】
品名版本备注
uPyCraftV0.19DF出品MicroPython IDE
SSD1306库 for MP2016-10-04https://github.com/timotet/SSD1306
Modified SSD1306 driver from micropython Added hardwarehorizontal scroll and a clear function

Tcp.tlink.io
需要了解TCP物联网规约。协议标签:      
TCP client 示例代码
dfrobot

【一步一步学习】第一步:硬件接线接线表


Esp32
oledVcc3v3

GndGnd

SclPin22

SdaPin21
LM35Pin(data)Pin36(A0)

Gndgnd

第二步:配置物联网侧。在tlink.io申请一个注册账号,然后设置设备----提取序列号。详情请看该网站的开发者中心http://tlink.io/help.htm。 另外,我为dfrobot评测的几篇小文,也被有幸收录到开源案例中,也可作为参考:http://tlink.io/case/dfrobot_three.htm
第三步:FireBeetle Board-ESP32侧代码准备import network
import socket
import time
from machine import Pin,I2C,ADC
import ssd1306

i2c = I2C(scl=Pin(22), sda=Pin(21), freq=100000)
lcd=ssd1306.SSD1306_I2C(128,64,i2c)

adc0=ADC(Pin(36)) #LM35 PIN--A0

SSID="your ssid"
PASSWORD="your psw"
host="tcp.tlink.io"
port=8647
wlan=None
s=None

def connectWifi(ssid,passwd):
global wlan
wlan=network.WLAN(network.STA_IF)
wlan.active(True)
wlan.disconnect()
wlan.connect(ssid,passwd)
while(wlan.ifconfig()=='0.0.0.0'):
    time.sleep(1)
return True

try:
#while True:
connectWifi(SSID,PASSWORD)
ip=wlan.ifconfig()
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.connect((host,port))
#s.send("hello DFRobot,I am TCP Client")
s.send("your serial number") #第一次连接后,需要发送序列号,仅一次即可
time.sleep(2)#延时2S
lcd.clear()
lcd.text("TCP connect..",0,16)
i=10 #发送十次
while(i>0):
    print(i)
    i-=1
    temperature = adc0.read()*0.001409587904157*10*2   #该系数的计算另帖讨论
    up_temp=str("%.2f" % temperature)
    up_temp="#RTU,"+up_temp+"#" #组合出上送的数据标签
    s.send(up_temp)
    print(up_temp)
    lcd.clear()
    lcd.text(up_temp,24,32) #显示上送的数据标签
    lcd.text("Countdown:"+str(i),0,48) #显示倒计次数
    lcd.show()
    time.sleep(10) #延时10S

while True:
      data = s.recv(1024)
      if(len(data) == 0):
      print("close socket")
      s.close()
      break
      print(data)
      ret = s.send(data)

except:
if (s):
    s.close()
wlan.disconnect()
wlan.active(False)
第四步:上送10次温度数据(间隔10秒)



【小结】
今天我们一起学习了利用TCP client上送温度数据至物联网。而且上送了一组(10次)数据,今后我们还要学习低功耗,我希望FireBeetle Board-ESP32以及oled正常在休眠状态,在收到外部中断激活后,上送10组数据,然后继续休眠。这是下一个玩具啦,也希望玩家跟帖给我提出更好的建议,你对外部中断激活以及低功耗运行有什么好建议,也希望一起探讨交流。谢谢。沧海抱拳。



极客俊逸 发表于 2018-10-28 15:11:19

好贴,我收藏了
页: [1]
查看完整版本: 一步一步使用uPyCraft学习MicroPython之TCP上送温度至物联网