Как начать программировать микроконтроллеры на гаджеты? С чего начать?
Уважаемые друзья, говоря честно, такого вопроса не нашел, поэтому хочу вас спросить более конкретно. Я более-менее продолжительное время пишу front-end на стандартном стеке(html, css, uikit/bootstrap3, grunt, javascript, angular) + балуюсь с питоном(Django) + знаю SQL, включая mysql и postgresql + mongodb.
Опыта написания программ на C/C++ нет, хотя раньше неплохо писал на Java, но забросил язык из-за его тупости и корявости. Ранее никогда не имел дел с программированием микроконтроллеров и даже не представляю, как это происходит и на чем лучше осуществлять свои идеи. На данный момент для тесто хочу сделать небольшую какую-нибудь финтифлюшку : маленького робота на колесиках, какой-нибудь браслет, который датчиком считает сердцебиение. Позже хочу доучить Swift с эпловским китом и выводить эти данный на телефон.
1) Учитывая мой стек, можно ли как-нибудь начать с ним писать и выводить это куда-то?
2) Когда мы пишем приложение на iOS, то сам app на телефоне мы пишем на Swift. А ПО на микропроцессоре на чем мы пишем, чтобы оно принимало ввод с телефона и позволяло делать вывод в БД?
3) Как научиться конфигурировать все детали вместе, чтобы изготовить, например, свой браслет-счетчик сердцебиения?
Ваш стек даром не нужен для гаджетов. Объясню почему. У меня есть часы Moto 360. Они работают 20 часов с момента полного заряда. Какой-то недоумок реализовал для них банальный таймер (включили - отсчет пошел) на java. Работа этого таймера садит батарею за ДВА ЧАСА. Программисты, которые учились на высоко-высоко уровневых языках ничерта не понимают в том, что они делают, применяя на себе закон дырявых абстракций (отправляйтесь читать блог Спольски) в полную силу. Хороший программист сделал бы это на нативном C, задействуя аппаратный таймер процессора часов и не выжирая батарею.
Чтобы заниматься тем, что вы тут пожелали, начните хотя бы с месячного интенсива по C. Именно по C, а не C/C++. Когда будете понимать, что такое регистровая переменная и как параметры передаются в функцию - можно будет только лишь подумать о смене квалификации. Успехов.
Я бы добавил обязательно перед интесивом С, изучить ASM процессора на котором будет трудится финтифлюшка. Боюсь без этого, новый таймер на нативном С на часы будет жрать заряд за 10 часов ;)
Daemon23RUS: сарказм: лучше сразу начать изучать с уровня метализации соеденений D триггеров. АСМ слишком высокоуровневый. Господа, палку перегибаете в очередной раз: из слишком высокоуровневого в слишком низкоуровневое. Если использовать МК арм кортексы Мх, то достаточно изучить и набрать опыт разработки на ANSI-C. В России почему-то любят упарываться асмом абсолютно безрезультатно (хотя самые шустрые полу-асм библиотеки для сигнальных нужд нахожу только в США и Европе).
Mirn: Предлагаю обойтись без заезда на личности и адреса проживания. Кортекс - очень даже сложный процессор, без знания того, как работает его ядро, прерывания и периферия, можно будет только копипастить примеры кода для всяких RTOS, напарываясь на горы WTF при любой попытке сделать нестандартное. Знание языка - это только 10% программиста в реальном мире. Остальное - знание API и технологий. API камня-это его ассемблер и архитектура.
Армянское Радио: есть такое заблуждение: что нужно не учиться просто велосипеду. Всенеприменно и обязательно надо изучать механику, сапромат, физику твёрдого тела и материаловедение прежде чем просто поехать на несчастном просто-велике. Хочешь отвадить от микроконтроллеров - так и скажи, не запудривай мозг людям чепухой. Асм - телеге пятое колесо. Станет профессионалом - понадобится быстродействие или малый размер прошивки и вот только тогда и понадобится асм. Зачем сразу ту же RTOS давать? Откуда такой лютый оверинжениринг и рокет-сайнс? Почему нельзя взять ардуино и не начать писать скетчи чисто для практических сиюминутных задач?
Mirn: Извините, но вы мало понимаете в процессах обучения. Не требуется писать на ассемблере. Требуется осознавать, что стоит за строчками сишного кода. Без этого знания дальше сиюминутных скетчей уйти будет практически невозможно. Почему шаговый мотор дергается, если контроллер одновременно с этим передает данные на ПК? Ведь синтаксически - все верно, по тексту тоже все верно. Вот вам и тупик, втыкание в который с размаху происходит крайне быстро.
Даже очень. Повторяю. ОЧЕНЬ неглупые люди, которых обучали методом "по вершкам" заваливают самые банальные задачи, ввиду того, что реально - не имеют представления о том, что они делают.
Армянское Радио: а как связан АСМ и RTOS с осознанием простого факта что требуется время на выполнение параллельных задач? Да не спорю что у многих высокоуровневых программистов вообще нет осознания реалтайма в коде и что код выполняется какое то время и оно постоянно меняется. Но к этому приучаются явно не так. Хотя-бы для начало нужно избегать многопоточности на прерываниях и RTOS и ставить для этого явно простые задачи. KISS Вам в помощь!
Mirn: Про велосипед: Все дело в том что ТС как раз не собирается учится ездить, он желает делать велосипеды. С сапроматом велик то понадежней будет.
Про АСМ: Отчего же 5е ? Я бы даже назвал это фундаментом. Во вторых он очень прост, для тех же AVR, и в третьих SEI, CLI, разница между RETI и RET гораздо понятней в разрезе ASM.
Daemon23RUS: для начала надо научиться ездить и лучше не на АВР с его нестандартной архитектурой. SEI, CLI, RETI, RET и это особенность конкретной платформы и конкретного компилятора. В других МК и/или компиляторах уже всё сделано нормально на Си, например смотри CMSIS или ардуину. То что Вы начали изучение раньше и понадобилось это использовать - очень хорошо, но это далеко не обязательное знание.
Mirn: Ардуина есть как на AVR (ATmega, ATTiny) так и ARM, то что называется в одной платформе SEI, CLI, RETI, RET, у CMSIS это CPSIE, CPSID, BX LR. Но это не меняет сути этих команд. На ARM много сишных библиотек и писать можно без знания ASM, как впрочем и на AVR. Как верно замечено Армянское Радио: результатом, возможно, будет таймер за 2 часа пожирающий заряд.
Наша дискуссия, в контексте заданного вопроса, сводится к тому, надо знасть ассемблер или нет. Причем знать, а не писать на нем.
Можно писать программы на МК без знания асм - да
Можно писать хорошие программы на мк без знаия асм - нет
Нужено ли знание асм для МК - ?
Daemon23RUS: в моей практике было всё наоборот: хороший программист с опытом на с++ и си (игры, астериск и тд) отлично и без проблем уходит в микроконтроллеры. А ассемблистов надо долго и упорно бить по рукам, переобучивать основам программирования и информатики, а некоторым упорным запрещать на уровне компилятора ассемблерные вставки например через дерективы. Поэтому я считаю что знание асма не обязательное, но очень желательное. А вот знание Си и умение с практикой программирования на нём обязательное и без него ниже того же астериска и его драйверов не спускаться. И у тебя ещё раз говорю знание железа в одну кучу с ассемблером спихнуто но на деле запрет прерываний, манипуляции с стеком и прочее это вообще не ассемблер. Можно писать хорошие программы на мк без знаия асм - можно и нужно. Проект должен быть жизнеспособным и портируемым . И асм может иметь место только когда совсем по другому никак (за 10 лет такого НИРАЗУ не видел).
Mirn: У Вас подмена понятий. Писать хорошие, портируемые программы для готовых устройств, и создавать устройства. Во втором случае то что я перечислил - обязательно. В конечном итоге компилятор переводит все в асм (машинный код)
Как научиться конфигурировать все детали вместе, чтобы изготовить, например, свой браслет-счетчик сердцебиения?
Как я ранее говорил, ТС хочет делать велосипеды. Причем задачу он себе поставил разноуровневую.
Микроконтроллеры это C/C++, цифровая схемотехника и специфичные протоколы типа I2C/SPI/CAN и т.п. Учите C, когда сможете написать что-то сложнее Hello World без внешних библиотек и фреймворков - берите отладочную плату и вникайте в специфику МК.
Мне тоже эта тема была интересна! Начал с того что купил простенькую платку ардуино и несколько датчиков.
Насколько я знаю raspberry pi дружит с Пайтоном, но можно обойтись и без его. Я реализовывал взаимодействие с ардуино через телефон на андроиде и блю тус. Там все более, чем просто. Делал автоматическую кормилку для кошки. Через блю тус устанавливал время кормления. Мне кажется главное создать простейшее устройство. В процессе появится незаменимый опыт и придет понимание, куда копать дальше.
Удачи
На Ваш опыт высокоуровневого программирования идеально ляжет Micropython, его железо мощнее и компактнее Ардуин и вместе с тем нет возни с ОС. Начните, например, с pyboard lite v1.0 и родных расширений - шилды, сервы, вот и будет Вам робот. Удобно с ним то, что барьер входа отсутствует, всё начинает работать сразу "из коробки" micropython-ru.readthedocs.io/ru/latest/contents.html без шаманств и долгого изучения С-ей.
Для 99, 9% задач, которые я могу вообразить, связки Python+Micropython хватит, а сэкономленное время лучше потратьте на изучение прикладной схемотехники.