В среде ардуино есть поддержка процессоров stm32 и существуют готовые совместимые платы — напр т.н. bluepill.

Распиновка такая

700px-Bluepillpinout

Для работы в среде ардуино нужно поставить плату stm32 в BoardManager и выбрать stm32f103c8t6.
Для прошивки можно использовать родной прошивальщик st-link (для его подключения на плате есть припаяные 4 штырька), например такой китайский за пару баксов —

st-link

После заливки специального бутлоадера возмжно заливать скетчи из среды ардуино прямо через USB подключение, но мне показалось более стабильным использованием st-link (хотя и с ним иногда приходилось вручную нажимать ресет на плате в момент заливки).

На борту находятся три аппаратных Serial (Serial1,Serial2,Serial3), плюс еще один доступный через USB (собственно Serial, но работает он только при заливках через st-link).

Еще деталь — после заливки бывает нужно переподключить USB чтоб заменилось подключение /dev/ttyACM0 — сам порт не ресетится.

Крепление usb в плате — хлипкое и требует пропайки. В некоторых случаях требуется доустановка сопротивления (ибо подтяжка стоит неверная, впрочем почти вся техника толерантна к таким мелочам).

В общем — плата значительно мощнее сравнимых атмелей (nano), ну и разрядность конечно выше.

Опубликовано автором vs | Добавить комментарий

Определение питающего напряжения

Для контроля расхода батареи нужно контролировать падение напряжения на источнике питания,
можно делать так

void setup() 
{
  Serial.begin(115200);
}

void loop() 
{
  double Value = readVcc()/100.;
  Serial.println(Value);
  delay(100);
}



int readVcc() 
{
  ADMUX = (1<<REFS0) | (1<<MUX3) | (1<<MUX2) | (1<<MUX1); 
  delay(10);
  ADCSRA |= _BV(ADSC);
  while (ADCSRA & (1<<ADSC)); 
  uint8_t low  = ADCL; 
  uint8_t high = ADCH;
  long result = (high<<8) | low;
  result = 1125300L / result /10 ; // Calculate Vcc (in mV); 1125300 = 1.1*1023*100 0
  return result; 
}
Рубрика: Без рубрики | Добавить комментарий

CSR-BC417

Речь пойдет о bluetooth девайсе построеном на CSR CSR-BC417-datasheet Выглядит модуль примерно так

HC-05

Пинауты различаются в зависимости от прошивки — для HC-05 это такой
HC-05-pinout

А для HC-06 такой
HC-06-pinout

Я сначала купил с HC-06, потом думаю что нужно покупать с HC-05. Кстати — возможна и самостоятельная перепрошивка модулей, и даже самостоятельное программирование чипа CSR.

Важными для подключения являются пять ног: RX TX GND VCC — компорт и питание, а также нога KEY — переход в режим AT-сомманд для программирования модуля. При подаче «1» на ногу KEY модуль переходит в режим AT-комманд. Пишем скетч. (берем из SoftwareSerial экзамплов) или коннектимся через USBTTL на скорости 9600. Важный момент — команды нужно вводить быстро, без переводов строк. Фактически их надо набрать в каком-то другом терминале и копировать целиком из буфера обмена. По крайней мере так получалось у меня с модулем HC-06. Обязательно, чтоб скорости в обоих терминалах были 9600, модуль чувствителен к таймингу. Начинать надо с отсылки AT — модуль должен вернуть OK (эта команда проходила на 9600 скорости модуля и любых скоростях ардуино терминала). Дальше — устанавливаем NAME и PIN.
Полный список команд можно посмотреть тут. Далее приводу лог обмена (добавил переводы строк для читабельности, которых на самом деле нет).

AT
OK
AT+VERSION
linvorV1.8
AT+NAMErobot
OKsetname
AT+PIN1234
OKsetPIN

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

bash-4.3# hcitool scan
Scanning ...
	98:D3:31:60:07:EB	robot
	BC:85:56:8A:93:C8	....
rfcomm connect /dev/rfcomm0 98:D3:31:60:07:EB	1  &
... blueman выкинет окошко - туда ввести 1234 
screen /dev/rfcomm0 9600
... все что будем тут перчатать - должно появляться на терминалке и наоборот...

Вторые сокеты при этом создать нельзя

bash-4.3# rfcomm connect /dev/rfcomm1 98:D3:31:60:07:EB 2
Can't connect RFCOMM socket: Connection refused

Пин совсем отключить нельзя, даже если секурность не требуется. Но можно настроить автоматический ввод пина,
для этого нужен bluez-simple-agent ему нужно скормить bt-addr и пин, говорят тоже можно сделать с bluetoothctl.

Питание: модуль нужно питать от 3.3В, но TX-RX толерантны к 5В, так что можно обойтись без согласователя уровней.

Хорошая обзорная статья про все такие модули.

Рубрика: pinout, radio | Добавить комментарий

IR TSOP

Для InfraRed -управления в linux используется lirc, поддерживающий кучу готовых инфракрасных ресиверов. Но для самодельного serial ресивера запуск через lirc оказался слишком запутанным. С другой стороны — в ардуино есть готовый пакет IRemote. Заявлено, что библиотека работает даже с Attiny85.

Датчики TSOP имеют три вывода — два для питания и сигнальный. Датчики отличаются формфакторами и рабочими частотами (обычно от 38KHz). Примерные пинауты

tsop17xx pinout diagram

TSOP

TSOP1838-pins

Рубрика: pinout | Добавить комментарий

HC-SR04

Ультразвуковой сонар HC-SR04 дешев (около 50рублей) и прост в управлении. Два вывода — триггер-эмиттер и микрофон-детектор. Акустика трансмиттера и ресивера выглядит одинаковой. Алгоритм использования — включить trigger на 10мс, и затем измерить появление импулься на echo. Разница во времени выдаст два расстояния до препятствия (звук должен сходить до препятствия и вернуться обратно). Излучаются пачки по 8 импульсов на частоте 40кгц. Детальнее можно почитать тут.

hc-sr04

Примерный код

#define trigPin 13
#define echoPin 12
#define led 8


void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
}


long getSonar(int tPin,int ePin ) { // trigger, echo pins
  
  long duration, distance;
  digitalWrite(tPin, LOW);  
  delayMicroseconds(2); 
  digitalWrite(tPin, HIGH);
  delayMicroseconds(10); 
  digitalWrite(tPin, LOW);
  duration = pulseIn(ePin, HIGH);
  distance = (duration/2) / 29.1;
  return distance;
}

int state = 0;
void toggle_switch() {
  state=!state;
  digitalWrite(led,state?HIGH:LOW);
  Serial.println("trigger:"+String(state));
}

int iam_near = 0;

void loop() {
  long  distance;
  distance = getSonar(trigPin, echoPin);
  int near = (distance<15);
  //Serial.println(String(distance)+"cm");
  if (near && !iam_near) { // switch on please
    toggle_switch();
  }
  iam_near = near;
  
  delay(100);
} 

Рубрика: Без рубрики | Добавить комментарий

i2c scanner

#include <Wire.h>

void setup()
{
  Wire.begin(0,2);     // its ESP-01 config
  // Wire.begin();  // for normal Arduino 
  Serial.begin(115200);                 
  while (!Serial);                    
  Serial.println("\nI2C Scanner");    
}
void loop()
{
  byte error, address;                
  int nDevices;                       
  
  Serial.println("Scanning...");      
  nDevices = 0;                       
  for(address = 1; address < 127; address++ ) 
  {
    
    Wire.beginTransmission(address);          
    error = Wire.endTransmission();           
    if (error == 0)                           
    {                                         
      Serial.print("I2C device found at address 0x");  
      if (address<16)                                  
        Serial.print("0");                             
      Serial.print(address,HEX);                       
      Serial.println("  !");                           
      nDevices++;                                      
    }
    else if (error==4)                                 
    {
      Serial.print("Unknow error at address 0x");      
      if (address<16)                                  
        Serial.print("0");                             
      Serial.println(address,HEX);                     
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else                      
    Serial.println("done\n");                
  delay(5000);                               
}
Рубрика: sketch | Добавить комментарий

esp8266 и 32M

RobotDyn выпускает прекрасные модули — NodeMCU V3 Lua WIFI module integration of ESP8266 + extra memory 32M flash, USB-serial CH340G.

robotdyn_esp8266

Максимум выведенных ног, питание от 5V, на борту USB-Serial преобразователь ср340G, и целых 32М флешка. И все — за 180руб, ну круто же?

В ардуино прекрасно компиляется при выборе board nodeMCU 1.0.
Поставляется с NodeMCU прошивкой (LUA).

Рубрика: pinout | Добавить комментарий

A5-V11

Чрезвычайно дешевое устройство (450руб) на RT5350 с возможностью установки openWRT. Маленькая 4M ROM легко перепаивается на 16M winbond 25Q128FVIQ.
Сериальный порт легко распаивается, работает как и большинство RT5350 на скорости 57600.

a5-v11_upgrade

Для того чтоб можно было подключаться программатором без дальнейшего выпаивания пришлось заменить один конденсатор 470mf и положить его на бок, а также подвесить ногу питания и подключить ее через диод (чтоб питание от программатора на подавалось на основную плату в момент прошивки). Вместо диода стоит олдскульный КТ315.

a5-v11_owrt

Куча места для экспериментов обеспечено. Фулфлешь слит. Дальнейшие эксперименты абсолютно безопасны, в любой момент можно восстановиться через программатор.

Рубрика: soc | Добавить комментарий

FE1.1 USBHUB

Встроенный малогобаритный USB hub часто нужен в проектах, где к SOC/SOM компьютеру (такие обычно имеют один USB host выход)
нужно присоединить более одного устройства. Решая задачу можно разбирать существующие хабы, выпаивая лишние USB-коннекторы, либо собрать собственный на основе набора микросхем USB Transeiver. Наиболее популярные из них — fe11-datasheet в корпусе QFN48, fe1-1s_datasheets в корпуске SSOP28,
а также варианты на других схемах, например GL850A.

Закупил на али FE1.1 и FE1.1s вместе с breackboards, примерно такими:
ssop28_boardqfn48_board

Схема для FE1.1 потребовала 22pf коненцаторов, которых пока не оказалось. А также кучу соединений и подтяжек. Заработала только в режиме low-speed, что для работы не годится. Посмотрим что получится после подключения кондеев, но пока результат неочень.

fe1-1_schematic

Важно не забыть объединить все OVCB, все VD33, и VD18_O. И кондей на VD33_OUT важен.

fe1-1_done

Но лучше использовать FE1.1s — деталей напаивать нужно меньше (кристал 12Мгц, два конденсатора и один резистор)

fe1-1s_schematic

Результат получился такой

fe1-1s_done

Определился как high-speed, тестирование скорости записи на быструю флешку дало 18МБайт/сек, что есть хорошо. В общем — его и нужно использовать в финальном проекте.

Нарисовал публичный проект в easyEDA, развел платы и заказал 10штук. С доставкой в Россию получилось на тысячу рублей. Для хобби приемлемо, для продакшна конечно дорого.

Рубрика: usb | Добавить комментарий

ESP-01

Из всего многообразися esp8266 выведено только два GPIO (0,2) и сериальный порт (TX=GPIO1,RX=GPIO3). На TX также разведен голубой светодиодик. Размер флеша может быть разный — обычно 512Кб, но бывает и 1М.

esp-01_flashing

esp-01_pinout

Если загрузиться с GPIO0 на нуле — то включается ожидание загрузки прошивки. По окончании загрузки модуль переходит в рабочее состояние (независимо от состояния GPIO0), что позволяет сразу же проверять работу без подачи ресета и переконфигурирования проводов. РЕКОМЕНДУЕТСЯ подтянуть к питанию ресет, иначе иногда модули не стартуют, отлавливается сложно. Кроме того GPIO2 тоже лучше подтянуть вверх, по даташиту он включен в управление загрузкой (и для всех схем должен быть 1).

Модуль крайне чувствителен к потреблению, заявлена работа от 3.0 до 3.6. Пробовал — работает и от 4.2, что позволяет питать от некоторых аккумуляторов.
Но бортового питания 3.3в от USB-TTL достаточно чтоб моргать диодом, и уже недостаточно чтоб выводить в серийный порт, в пике модуль может требовать до 200ма (при коннекте к wifi). Такие особенности очень тяжело отлавливать. Вероятно такое же поведение у всех esp.

Существуют удобные программаторы под гребенку ESP-01
esp01_programmer

Модуль представляет из себя обычный USB-TTL преобразователь и требует доработки для перехода в режим программирования — нужно замкнуть GPIO0 на Землю.

Странно — но автоматический ресет не выведен, доделать можно забрав отсюда.

Рабочая схема (подобна тому что используют в NodeMCU), кондей можно выбрать и больше (у меня был 0.47, с ним работает но через раз, пока удалил, приходится вручную передергивать питание перед началом прошивки).

esp8266_prog

Для подпайки к конвертеру нужны две ноги (DTR 13, RTS 14) ch340g-datasheet

На всякий случай распиновка KT315 kt315

Ну все — теперь нормальный программатор получился. Почему сразу так не сделать?
esp8266prog_mod

Проверил работу i2c на GPIO (0,2) — работает нормально.

Рубрика: pinout | Добавить комментарий