Это старая версия документа!


Эксперимент 67. Отправка данных в интернет

Мы уже умеем подключаться к WiFi сети или создавать собственную точку доступа. Поднимать свой веб- сервер, чтобы принимать команды или сообщать данные. Например, наш WiFi- термометр является типичным устройством интернета вещей. Это датчик, к которому можно получить доступ через интернет. Этот датчик может находиться на другом конце света, может находиться в теплице, в автомобиле. Он может измерять температуру какого нибудь важного технологического оборудования, следить за соблюдением технологического процесса на производстве. Чтобы получить информацию с этого датчика к нему нужно обратиться.

Теперь мы попробуем сделать наоборот. Пусть наш термометр сам обращается на сервер в интернете и передает на него свои данные о температуре. На сервере эти данные будут сохраняться и мы, или другие пользователи интернета, смогут выйти на сайт и посмотреть данные, которые были ранее переданы туда.

Для этих целей воспользуемся известным интернет- сервисом для хранения данных с устройств интернета вещей dweet.io. Для наших целей нам даже не придется регистрироваться на этом сервисе. Достаточно просто передать на него данные и сервис их запомнит.

Для начала нам нужно просто научиться соединяться с интернет- сервисом и передавать туда хоть какие-то данные. Поэтому пока не будем собирать термометр, а ограничимся просто передачей константы.

Exp67.py
  1. from machine import Pin
  2. import network
  3. import gc
  4. import time
  5. import socket
  6.  
  7. _init()
  8. gc.collect()
  9.  
  10.  
  11. wlan_id = "Имя WiFi сети"
  12. wlan_pass = "Пароль"
  13.  
  14.  
  15. wlan = network.WLAN(network.STA_IF)
  16. wlan.active(True)
  17. wlan.connect(wlan_id, wlan_pass)
  18. time.sleep(1)
  19.  
  20.  
  21. while wlan.isconnected() == False:
  22. pass
  23.  
  24. print('Device IP:', wlan.ifconfig()[0])
  25.  
  26.  
  27.  
  28. def http_get(url, port=80):
  29. _, _, host, path = url.split('/', 3)
  30. addr = socket.getaddrinfo(host, port)[0][-1]
  31.  
  32. s = socket.socket()
  33. s.connect(addr)
  34. s.send(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (path, host), 'utf8'))
  35.  
  36. text = ''
  37.  
  38. while True:
  39. data = s.recv(100)
  40. if data:
  41. text += str(data, 'utf8')
  42. pass
  43. else:
  44. a = text.split('\r\n\r\n', 2)[1]
  45. return a
  46. break
  47.  
  48.  
  49. deviceName = 'PinLabIoTSensor010520'
  50. temp = 22.9
  51.  
  52. data = http_get('http://dweet.io/dweet/for/' + deviceName + '?temp=' + str(temp))