lunes, 24 de junio de 2013

Programar Arduino pro mini con un PL2303HX (Linux)

Aquí se indica como cargar sketches a un pro mini usando un adaptador USB to TTL PL2303HX.

Conexiones:

Pro mini    |      PL2303HX
Vcc          |      5V
GND        |      GND
RX           |      TX
TX           |      RX

Para cargar los sketch:
1- Conecte el PL2303HX al PC y este al pro mini. En el sistema el adaptador aparece con el nombre de ttyUSBn:
2- Presione el botón de reset del pro mini y mantengalo presionado

3- Presione el boton upload del arduino ide


4- Cuando aparezca el texto "Tamaño binario del Sketch" inmediatamente sueltas el botón de reset


5- Deberia indicar: Carga terminada. Vuelva a presionar y soltar el botón de reset

Bluetooth + Linux + Qt + C/C++

En este tuto veremos como comunicar un programa escrito en C/C++ - Qt con un arduino usando un módulo bluetooth.

Este post es idéntico al anterior, con la variación que en vez de mandar o recibir datos desde moserial lo haremos con un programa nuestro. Nuestro programa apagará y encenderá un led conectado al arduino y mostrará la respuesta enviada.

Paso 1: Instala las bibliotecas de desarrollo de python para c/c++

#yum install python-*

#yum install bluez*

Paso 2: Realiza todos los pasos de este post y verifica que funcione.

Paso 3: Cuando todo funcione entonces procedemos a abrir Qt Creator y creamos nuestro Qt Gui Application. En mi caso lo llame BluetoothRapido

Paso 4: Editamos el fichero .pro para que reconozca las bibliotecas python. para ello agregamos el siguiente string al final del fichero:

INCLUDEPATH += /usr/include/python2.7/
LIBS += -lpython2.7 -lbluetooth -lpthread




Nota que este ejemplo es para python 2.7. Debes verificar que versión de python tienes instalado en tu máquina. Si es distinto al 2.7 por ejemplo 2.5 entonces debes sustituir la versión en el string. Quedaría así:


INCLUDEPATH += /usr/include/python2.5/
LIBS += -lpython2.5 -lbluetooth -lpthread


Ya estás listo pasa usar la clase BluetoothManager que simplifica mucho el trabajo. Consta de dos métodos principales para enviar datos, sincrona y asincronamente, (Probado con Qt5 - c++x11):


class BluetoothManager{
 public:
 void init(){
 isOpen=true;
 Py_Initialize(); 
 main_module = PyImport_ImportModule("__main__");
 main_dict = PyModule_GetDict(main_module);
 PyRun_SimpleString(pycode_Init);
 } 
 // Envia un string sin esperar respuesta
 void sendAsync(QString data){
 if (!isOpen){
 perror("Error: puerto cerrado");
 return;
 }
 if (!data.size()){
 return;
 }
 // Concatena el string a enviar con el comando
 PyRun_SimpleString(QString(QString("sock.send(\"")+data+"\\n\");\n").toLatin1().constData()); 
 } 
 // Envia un string y espera la respuesta
 QString sendSync(QString data){
 if (!isOpen){
 perror("Error: puerto cerrado");
 return QString("");
 }
 if (!data.size()){
 return QString("");
 }
 
 // Concatena el string a enviar con el comando
 PyObject *data_py = NULL;
 PyRun_SimpleString(QString(QString("sock.send(\"")+data+"\\n\");\n").toLatin1().constData());
 usleep(150000);
 PyRun_SimpleString("print(\"Recibe Data: \");\n");
 PyRun_SimpleString("data = sock.recv(1024);\n");
 PyRun_SimpleString("print \"received: \", data;\n");
 data_py = PyMapping_GetItemString(main_dict, (char*)"data");
 return QString(PyString_AsString(data_py));
 }
 
 void close(){
 if (isOpen){
 PyRun_SimpleString("sock.close();");
 Py_Finalize();
 isOpen=false;
 }
 }
 
 ~BluetoothManager(){
 close();
 }
 private:
 bool isOpen;
 // Código para inicializar
 const char * pycode_Init=
 "from bluetooth import *;\n"
 "server_address = \"00:13:01:05:06:73\";\n" // Mac de mi modulo
 "port = 1;\n"
 "sock = BluetoothSocket( RFCOMM );\n"
 "sock.connect((server_address, port));\n"
 "sock.settimeout(100.0);\n";
 int t=0;
 PyObject *main_module, *main_dict;
 };


-----------------------------------

00:13:01:05:06:73 es la MAC de mi módulo bluetooth (hc-05). Debe sustituirla por su MAC.

Por ejemplo Ejemplo, para mandar un string asincronamente al bluetooth:

BluetoothManager bt;
bt.sendAsync("UN_STRING");

martes, 11 de junio de 2013

Instalar Android Studio en Fedora (Solución a No JDK found)


Primero nos descargamos el .zip de aqui y lo descomprimimos.

Si intenta ejecutar el fichero bin/studio.sh encontrara el siguiente error:

ERROR: Cannot start Android Studio\nNo JDK found. Please validate either STUDIO_JDK, JDK_HOME or JAVA_HOME environment variable points to valid JDK installation.

Para evitar esto hacemos:

Vemos que versión de JDK tenemos instalada. En mi caso es la jdk1.7.0_11



Luego editamos el fichero ubicado en android-studio/bin/ llamado studio.sh con algún editor de textos y agregamos la siguiente linea debajo de las lineas de comentario:

JAVA_HOME=/usr/java/jdkVERSION_DE_JDK

En mi caso quedaría así:

JAVA_HOME=/usr/java/jdk1.7.0_11



Luego guardas y ejecutas el fichero studio.sh

listo