Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp29 [2020/05/19 19:10] – [Схема эксперимента] labuser29products:laboratory_iot:exp29 [2024/11/15 15:13] (текущий) – [Эксперимент 29. Привет, Мир! LCD] labuser30
Строка 1: Строка 1:
 ===== Эксперимент 29. Привет, Мир! LCD ===== ===== Эксперимент 29. Привет, Мир! LCD =====
  
 +В теоретической части (перед экспериментом) мы познакомились с интерфейсами, в частности с шиной I2C. Кроме того, мы изучили способ подключения дисплея в нашем конструкторе. Разберемся с библиотекой для работы с дисплеем.
 +
 +Ранее мы использовали системные библиотеки, такие как ''time'' или ''machine''.
 +Теперь мы впервые столкнемся с пользовательской библиотекой. Это библиотека функций, которую написал кто-то другой или, даже ты сам, и теперь желаешь использовать для своего эксперимента. Отличие заключается в том, что системные библиотеки являются частью языка программирования, а пользовательские библиотеки перед использованием нужно загрузить.
 +
 +Микроконтроллер на борту нашего конструктора имеет встроенную Flash память, куда можно загружать различные файлы, в том числе библиотеки. 
 +
 +Сначала загрузи библиотеку для работы с дисплеем к себе на компьютер.
 +<WRAP center round download 60%>
 +{{ :products:esp-iot:lcd_api.zip |}}
 +</WRAP>
 +
 +В архиве ты обнаружишь два файла:
 +  * lcd_api.py
 +  * esp8266_i2c_lcd.py
 +
 +Это и есть файлы библиотеки для управления дисплеем LCD 1602. Распакуй их из архива в какую либо папку на компьютере. Эти файлы необходимо загрузить в память микроконтроллера. Для этого нужно открыть файловый менеджер. Открывается с помощью пункта меню
 +<span menu>
 +<span menu-item>Device</span>
 +<span menu-item>Filemanager</span>
 +</span>
 +или кнопкой {{:products:2020-05-04_15-35-38.png?nolink|}}
 +
 +Откроется окно файлового менеджера:
 +{{ :products:esp-iot:2020-05-19_19-33-19.png?nolink |}}
 +
 +Здесь можно увидеть какие файлы уже загружены. Файл ''boot.py'' — это системный файл, его код исполняется сразу после загрузки микроконтроллера. Файл ''init.py'' — содержит код функции ''_init()'', которую мы вызываем в каждом эксперименте.
 +
 +Сюда же нужно загрузить файлы библиотеки. Для этого служит кнопка ''Upload...''. После ее нажатия открывается стандартное диалоговое окно выбора файла. После выбора файла он загружается. Так выглядит файловый менеджер после загрузки файлов библиотеки:
 +
 +{{ :products:esp-iot:2020-05-19_19-33-19_.png?nolink |}}
 +
 +Когда файлы загружены, можно приступить к сборке схемы и написанию программы.
 ==== Схема эксперимента ==== ==== Схема эксперимента ====
 +Вся сборка заключается в подключении двух проводов:
 +
 {{ :products:esp-iot:exp13_mont.png?direct&600 |}} {{ :products:esp-iot:exp13_mont.png?direct&600 |}}
 //Рисунок 1. Монтажная схема эксперимента// //Рисунок 1. Монтажная схема эксперимента//
 +
 +
 +<WRAP center round important 60%>
 +Внимание! В зависимости от модели микросхемы I2C, установленной в Лаборатории IoT, адрес на шине может быть 0x3F или 0x27. Запусти данный пример с указанием адреса 0x3F или 0x27, чтобы узнать какой вариант актуален для твоей платы.
 +</WRAP>
  
  
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
-<file python Exp24.py[enable_line_numbers="2", start_line_numbers_at="1"]> +<file python Exp29.py[enable_line_numbers="2", start_line_numbers_at="1"]> 
-from machine import PinPWM +from machine import I2CPin 
-import time+from esp8266_i2c_lcd import I2cLcd
 _init() _init()
  
-tempo 2+DEFAULT_I2C_ADDR 0x3F # Или 0x27 в зависимости от твоей платы IoT
  
-tones = { 
-    'c': 262, 
-    'd': 294, 
-    'e': 330, 
-    'f': 349, 
-    'g': 392, 
-    'a': 440, 
-    'b': 494, 
-    'C': 523 
-} 
  
-speaker PWM(Pin(15, Pin.OUT))+i2c I2C(scl=Pin(5)sda=Pin(4), freq=400000) 
 +lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16) 
 +lcd.backlight_on() 
 +lcd.putstr("Hello, World!\nSecond Line") 
 +</file>
  
-melody = 'caagafcccaabgCCddbbagfcaagafCddbbagfcaagaf' +Сначала мы подключаем библиотеки, которые необходимы для работы программы. 
-rhythm [88, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 8, 8, 8, 8, 8, 8, 8,  +<code python[enable_line_numbers="2"start_line_numbers_at="1"]> 
-8, 8, 8, 8, 8, 8, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 2]+from machine import I2CPin 
 +from esp8266_i2c_lcd import I2cLcd 
 +</code>
  
-for tonelength in zip(melodyrhythm): +На шине I2C каждое ведомое устройство имеет адрес. Чтобы обратиться к устройствунеобходимо знать его адрес. Наша микросхема, которая управляет дисплеем, имеет адрес ''0x3F'' или ''0x27''. Попробуй оба варианта, чтобы понять на каком адресе находится именно твоя микросхема I2C. 
-    speaker.duty(512+ 
-    speaker.freq(tones[tone]) +Настраиваем контроллер шины I2C: 
-    time.sleep(tempo/length+<code python[enable_line_numbers="2", start_line_numbers_at="7"]> 
-    speaker.duty(0+i2c = I2C(scl=Pin(5)sda=Pin(4), freq=400000
-    time.sleep(tempo/length/4+</code> 
-</file>+ 
 +Здесь мы сообщили контроллеру, что для сигнала SCL нужно использовать вывод 5, а для SDA — 4Задали частоту шины 400 кГц. Настроенный объект контроллера записали в переменную ''i2c''
 + 
 +Теперь настраиваем дисплей. 
 +<code python[enable_line_numbers="2", start_line_numbers_at="8"]> 
 +lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16
 +</code> 
 +Создаем объект дисплея и в качестве параметров передаем объект контроллера I2C, адрес устройства, количество строк дисплея и количество символов в строке, соответственно. 
 + 
 +Теперь мы имеем объект дисплея, с которым можно работать. Начнем с включения подсветки. Для этого используем функцию ''backlight_on()'': 
 +<code python[enable_line_numbers="2", start_line_numbers_at="9"]> 
 +lcd.backlight_on() 
 +</code> 
 + 
 +Выведем текст на дисплей с помощью функции ''putstr()'' 
 +<code python[enable_line_numbers="2", start_line_numbers_at="9"]> 
 +lcd.putstr("Hello, World!\nSecond Line"
 +</code>
  
 +В качестве параметра в функцию ''putstr()'' передается текст для вывода на дисплей. Можно заметить, что мы передаем одну строку, но на дисплее текст отображается в две строки. Дело в том, что переданная строка содержит специальный символ новой строки ''\n''. Этот символ сообщает дисплею, что необходимо перейти на новую строку.
  
 ==== Дополнительное задание ==== ==== Дополнительное задание ====
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-  * Попробуй +  * Попробуй выводить на дисплей различные текстовые данные 
 +  * Мигать подсветкой дисплея 1 раз в секунду
 </WRAP> </WRAP>