一步一步使用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组数据,然后继续休眠。这是下一个玩具啦,也希望玩家跟帖给我提出更好的建议,你对外部中断激活以及低功耗运行有什么好建议,也希望一起探讨交流。谢谢。沧海抱拳。
好贴,我收藏了
页:
[1]