Ухабистый путь инженера-программиста Raspberry Pi к получению температуры и влажности в помещении

задняя часть Python Интернет вещей малиновый пирог

задний план

Несколько дней назад компания получила небольшой подарок от Alibaba Feitian Park, отдела IOT. Поскольку босс занят, у него нет времени позаботиться об этом.

В то время он не был открыт, поэтому мне было любопытно, что это такое, поэтому я поспешно открыл его и обнаружил, что это Raspberry Pi 3 (Raspberry Pi 3). Я подумал, что это забавно, поэтому взялся за дело, поэтому мой начальник встал и попросил меня использовать этот гаджет для проверки соответствующих компонентов на платформе Ali IoT. Итак, есть инженер-программист Raspberry Pi, который реализует трудное путешествие температуры и влажности в помещении!

Вот что из коробки:

  1. Raspberry Pi 3 (модель Raspberry Pi 3 B+)
    • Плата Raspberry Pi 3-го поколения B+
    • USB-адаптер питания Raspberry Pi 5 В @ 2,5 А
  2. Контроллер сообщества Maker (DFROBOT)
    • Несколько кабелей Raspberry Pi
    • Модуль DHT11 (датчик температуры и влажности)
    • светодиодный модуль

Установлены

Скачать официальное зеркало сайта

Официальный сайт малины Pi, нажмите «Загрузки» в верхней части списка зеркал,

Raspbian — официальная операционная система для всех моделей Raspberry Pi.

Ниже представлены два типа зеркал:

  1. NOOBS: простой установщик ОС для начинающих
  2. RASPBIAN: официально поддерживает операционную систему Raspberry Pi на базе Debian.

Я выбираю нажать, чтобы загрузить вторую систему. После нажатия вы обнаружите, что есть 2 типа RASPBIAN, которые вы можете выбрать.

  • Благодаря интерфейсу оператора Raspbian поставляется с предустановленным большим количеством программного обеспечения для обучения, программирования и общего использования. В нем есть Python, Scratch, Sonic Pi, Java и т. д.
  • LITE версия без интерфейса оператора

Для таких, как я, новичок в Raspberry Pi, я выбираю загрузку системы RASPBIAN с операционным интерфейсом.

Формат SD-карты

Цель: вставьте SD-карту в устройство чтения карт TF, вставьте ее в компьютер и отформатируйте SD-карту какFAT32Формат.

:checkered_flag: мышьщелкните правой кнопкой мышиБуква диска SD-карты, нажмитеформат. В окне форматирования файловой системы выберите "[FAT32]", затем выберите "[Быстрое форматирование]», нажмите «Пуск» и дождитесь завершения.

:пингвин: установитьGParted, Щелкните правой кнопкой мыши букву диска SD-карты, щелкните правой кнопкой мыши, чтобы отформатировать, и выберитеFAT32и выберите Формат.

Зеркальное программирование

:checkered_flag: Вам необходимо скачать программу Win32diskimager, затем вставить SD-карту в картридер, скопировать скачанный выше образ на SD-карту, после завершения вынуть SD-карту из картридера и вставить в Raspberry Pi .

:penguin:

  • После загрузки откройте папку, в которой находится zip-файл, и введите следующую команду, чтобы разархивировать его.
 unzip 2018-10-09-raspbian-stretch.zip

Замените имя загруженного вами zip-файла, чтобы получить файл 2018-10-09-raspbian-stretch.img, который является изображением, которое нам нужно.

  • После получения файла изображения нам нужно записать файл изображения на заранее подготовленную TF-карту. Вставьте TF-карту в картридер и подключите ее к компьютеру. использовать
sudo fdisk -l

команда, чтобы увидеть имя этого устройства, которое на моем компьютере /dev/sdb.

  • Зная путь к устройству чтения карт, мы используем команду dd для записи файла изображения на карту TF. Команда выглядит следующим образом:
sudo dd if=2018-10-09-raspbian-stretch.img of=/dev/sdc bs=2M

Где за if= следует имя файла изображения, а за of= следует путь к устройству чтения карт. Введите, выполните команду и дождитесь ее завершения.

Процесс записи занимает некоторое время, и терминал отобразит его после завершения записи.

После того, как зеркальное изображение сожжено, вставьте TF-карту в слот для карт.После вставки шнура питания вы увидите, что маленький зеленый индикатор рядом с маленьким красным индикатором будет мигать. Зеленый индикатор мигает, указывая на то, что программирование изображения выполнено правильно и Raspberry Pi успешно включен. Теперь можно подключить дисплей и клавиатуру.

Как вы можете видеть на картинке ниже

Raspberry Pi подключен к модулю измерения температуры и влажности.

Схема контактов Raspberry Pi 3b

Сначала опубликуйте схему выводов Raspberry Pi 3b:

При подключении обратите внимание на метод кодирования и обратите внимание на направление схемы контактов Raspberry Pi, как показано на рисунке выше.

DHT11

DHT11 — это датчик температуры и влажности с калиброванным цифровым выходным сигналом. Его точность влажности составляет +-5% относительной влажности, температура составляет +-2 ℃, диапазон влажности составляет 20-90% относительной влажности, температура составляет 0 ~ 50 ℃. Разделен на 3 интерфейса, а именно:VCC, DATA, GND.

пин код имя Типы иллюстрировать
1 VCC источник питания + каскад, вход 3В-5,5В
2 DATA вывод данных выходной контакт
3 GND земля заземляющий контакт

закрепить ссылку

Я использую датчик dht11 с тремя головками, поэтому проводка следующая:

VCC (или положительный) --- источник питания 3 В для Raspberry Pi

GND (земля или минус) --- интерфейс заземления Raspberry Pi

ДАННЫЕ (D или out) --- контакт GPIO Raspberry Pi

1.VCCсоединять3V,можешь выбрать1рот или17рот

2.DATAсоединятьGPIOрот, я выбралGPIO4, первый7рот

3.GNDсоединять接地口, я выбрал первое14рот

Питон получает температуру и влажность в помещении

Установить Python3

Сначала протестируйте версию Python, установленную на Raspberry Pi 3.

sudo apt-get install python3

Поскольку многие нижние уровни Ubuntu используют Python2.*, Python3 и Python2 несовместимы друг с другом, поэтому в настоящее время вы не можете удалить Python2, и вам нужно указать Python по умолчанию на Python3.

Сначала удалите файл ссылки python по умолчанию в каталоге usr/bin/.

sudo rm -rf /usr/bin/python

Затем откройте терминал и введите следующую командную строку, чтобы установить новые отношения соединения.

sudo ln -s /usr/bin/python3.5 /usr/bim/python

Затем проверьте правильность версии Python, просто введите python в командной строке.

Написать код Python

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
 
channel =4
data = []
j = 0
 
GPIO.setmode(GPIO.BCM)
 
time.sleep(1)
 
GPIO.setup(channel, GPIO.OUT)
GPIO.output(channel, GPIO.LOW)
time.sleep(0.02)
GPIO.output(channel, GPIO.HIGH)
GPIO.setup(channel, GPIO.IN)
 
while GPIO.input(channel) == GPIO.LOW:
  continue
while GPIO.input(channel) == GPIO.HIGH:
  continue
 
while j < 40:
  k = 0
  while GPIO.input(channel) == GPIO.LOW:
    continue
  while GPIO.input(channel) == GPIO.HIGH:
    k += 1
    if k > 100:
      break
  if k < 8:
    data.append(0)
  else:
    data.append(1)
 
  j += 1
 
print("sensor is working.")
print(data)
 
humidity_bit = data[0:8]
humidity_point_bit = data[8:16]
temperature_bit = data[16:24]
temperature_point_bit = data[24:32]
check_bit = data[32:40]
 
humidity = 0
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0
 
for i in range(8):
  humidity += humidity_bit[i] * 2 ** (7-i)
  humidity_point += humidity_point_bit[i] * 2 ** (7-i)
  temperature += temperature_bit[i] * 2 ** (7-i)
  temperature_point += temperature_point_bit[i] * 2 ** (7-i)
  check += check_bit[i] * 2 ** (7-i)
 
tmp = humidity + humidity_point + temperature + temperature_point
 
if check == tmp:
  print("temperature :", temperature, "*C, humidity :", humidity, "%")
else:
  print("wrong")
  print("temperature :", temperature, "*C, humidity :", humidity, "% check :", check, ", tmp :", tmp)
 
GPIO.cleanup()

Показать результаты

Чтобы проверить, является ли результат точным, я приложил палец к датчику, и данные теста:

Тест правильный~~~.

MQTT публикует сообщения на прокси-сервер

Установить paho-mqtt

Чтобы установить paho-mqtt с помощью инструмента pip, введите следующую команду:

sudo pip install paho-mqtt

Сообщение о выпуске Python Демонстрация

import paho.mqtt.client as mqtt
import time
import json

#当代理响应连接请求时调用。
#rc的值决定了连接成功或者不成功
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))

#当收到关于客户订阅的主题的消息时调用
def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))


client = mqtt.Client()
#客户端初始化,设置客户端id等信息
client.reinitialise(client_id="test01",clean_session=True,userdata=None)
#客户端设置用户名,密码信息
client.username_pw_set(username="123456",password="2236FDE7A9744017E25C95B333E5D546AF354F74463EF6FDABA09AC20C19306979DA982C9659877D4896336A7E3484F12B1BAFF773B8343A2AA75CC9EC8B51B2")
client.on_connect = on_connect
client.on_message = on_message

#组装json数据
s = {'name':'mushuwei','age':24}
jo = json.dumps(s)

try:
    #connect()函数将客户端连接到代理。 这是一个阻塞函数。
    client.connect("127.0.0.1", 1883, 600)
    while True:
        #从客户端发送消息给代理。 publish(topic, payload=None, qos=0, retain=False)
        client.publish('test', payload=jo, qos=0)
        time.sleep(1)
    client.loop_forever(timeout=1.0,max_packets=1,retry_first_connection=False)
except KeyboardInterrupt:
    client.disconnect()


Поместите полученные выше данные о температуре и влажности в функцию, соберите их в данные json, поместите в нагрузку и опубликуйте сообщение агенту. Вот и все!

Данные клиента, подписавшегося на тестовую тему, показаны следующим образом:

Что касается написания кода прокси-сервера MQTT, вы можете обратиться к статьям, которые я писал ранее:

разное

Это конец подробного объяснения рынка IoT и моделирования технологий.

Оригинал не просто, если вы чувствуете себя хорошо, я надеюсь дать рекомендацию! Ваша поддержка - самая большая мотивация для моего письма!

Ниже вы постепенно будете использовать Netty для реализации IOT-сервера протокола MQTT.

Уведомление об авторских правах:

Автор: Му Шувэй

Источник блога сада:блог woo woo woo.cn на.com/Sanshenghu…

источник на гитхабе:GitHub.com/Саншэншу…    

Источник личного блога:sanshengshui.github.io/