Instalando y probando MONO en el Raspberry Pi

Para mí, que vengo de Windows, una de las cosas más importante que he logrado con el Raspberry Pi es programar en él en .NET fundamentalmente usando C# con las inmensas posibilidades que tienen IDEs como el Visual Studio y más recientemente Xamarin que no solo me permite un rápido desarrollo de aplicaciones sino que también me permite reusar muchos códigos ya existentes. Gracias al excelente proyecto MONO es posible ejecutar en Linux el mismo programa hecho en .NET que se compila en Windows. Para instalar MONO basta con el comando:
sudo apt-get install mono-complete
Luego que se instale vamos a probar que todo funcione bien, para ello crearemos un programa, lo compilaremos y ejecutaremos.
Crear el archivo HelloWorld.cs por ejemplo en la carpeta /home/pi/HelloWorldCSharp
cd /home/pi <– Ir a la carpeta /home/pi
mkdir HelloWorldCSharp <–Crear la carpeta HelloWorldCSharp
cd HelloWorldCSharp <– Ir a la carpeta HelloWorldCSharp
nano HelloWorld.cs <–abre el editor nano creando el archivo HelloWorld.cs
Escribir el siguiente código:
using System;
public class HelloWorld
{
    public static void Main()
    {
        Console.WriteLine(“Hello World!”);
    }
}
Salir con Ctl-X y guardar
Luego compilar con el siguiente comando:
sudo gmcs HelloWorld.cs
y ejecutarlo con el comando:
mono HelloWorld.exe

Si todo salio bien debe de haber escrito “Hello World”

Modem 3G en el Raspberry Pi

Lo primero es asegurarse que los paquetes netbase, ifupdown y ppp estén instalados:
apt-get install netbase ifupdown ppp

luego crear el fichero “/etc/ppp/peers/gprs” con el siguiente contenido:
user “YOUR_USERNAME”
connect “/usr/sbin/chat -v -f /etc/chatscripts/gprs -T YOUR_APN”
/dev/ttyUSB0
noipdefault
defaultroute
replacedefaultroute
hide-password
#lcp-echo-interval 30
#lcp-echo-failure 4
noauth
persist
#mtu 1492
#maxfail 0
#holdoff 20
usepeerdns
#Optional, make it always appear as ppp2:
#unit 2

Editar el fichero “/etc/ppp/chap-secrets” y adicionar al final:
YOUR_USERNAME * YOUR_PASSWORD

Igualmente editar el fichero “/etc/ppp/pap-secrets” y adicionar al final:
YOUR_USERNAME * YOUR_PASSWORD

FInalmente edite el fichero “/etc/network/interfaces” y adicione:
auto gprs
iface gprs inet ppp
provider gprs

Normalmente todo lo anterior es solo lo que se nececita, después del reboot debe de conectarse solo, para conectarse manualmente puede ejecutarse el comando:
ifup gprs
Y para desconectar el comando:
ifdown gprs

NOTA:
Casi siempre los modems 3G además del modem tienen incorporado un lector de memoria MicroSD esto hace con que el Raspberry Pi se confunda y no sepa exactamente cual es el modem y cual es el lector de memoria, para solucionar este problema debe de instalarse el programa usb-modeswitch:
sudo apt-get install usb-modeswitch
En el archivo : “/usr/share/usb_modeswitch/configPack.tar.gz” se encuentra compactado un fichero por cada modem soportado donde esta la información del comando a poner en el archivo “/etc/usb_modeswitch.d/12d1:1446”, ejemplo:
TargetVendor=0x12d1
TargetProductList=”1001,1406,140b,140c,1412,141b,1432,1433,1436,14ac,1506,1511″

MessageContent=”55534243123456780000000000000011062000000100000000000000000000″
Si se tiene duda de cual es el el código del vendedor y del producto, una vez conectado el modem, con el comando lsusb se obtiene un listado de todos los dispositivos USB conectados con sus código de vendedor y producto.

Usar el Puerto Serie del Raspberry Pi

El único puerto serie disponible en el Raspberry Pi esta en los GPIO14(Tx) y GPIO15(Rx) pero por defecto  está configurado para ser usado por la consola de linux y para enviar la información del bootup. Si queremos usarlo entonces…

1- Para desactivar la consola hay que editar el archivo “/etc/inittab”  en el final comentar la linea T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100   (para comentar colocar el caracter numeral (#) delante de la linea)

2- Para desactivar la información del bootup hay que editar el archivo “/boot/cmdline.txt”  y quitar toda referencia a ttyAMA0 (que es el nombre de este puerto) . Ejemplo el archivo puede tener el siguiente contenido:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
En este caso debe de quedar asi:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Para que los cambios se apliquen hay que reiniciar. Luego de reiniciar para probar se puede usar el programa minicom que puede ser instalado con el comando:
sudo apt-get install minicom
luego basta con iniciar minicom por ejemplo con el siguiente comando:
minicom -b 9600 -o -D /dev/ttyAMA0
Luego desde la PC conectar tambien a 9600.

UPDATE PARA Raspberry Pi 3
En el Raspberry Model B,B++ los pinos GPIO 14/15 estan mapeados a la UART0, pero en el Pi3 estos pinos están mapeados a la UART1 porque la UART0 es ahora usada para el Bluetooth, el problema es que la UART1 es por software y el baudrate depende de la velocidad del reloj que puede variar en dependencia de la carga del CPU ósea no es lo suficientemente estable. Una solución es desactivar el módulo bluetooth y volver a mapear los pinos 14/15 para la UART0.
1- En el fichero “sudo nano /boot/config.txt” adicionar al final la línea “dtoverlay=pi3-disable-bt”
2- Desactivar el modem con el comando “sudo systemctl disable hciuart”
3- Reiniciar, después de esto los pinos 14/15 estaran mapeados a la UART0 (ttyAMA0)

Iniciar el Raspberry Pi en modo Kiosk (pantalla completa ejecutando un programa)

En este ejemplo vamos a utilizar el navegador Epiphany para que al iniciar el Raspberry Pi muestre el navegador a pantalla completa y con una página determinada.

1- Mediante la herramienta de configuración “raspi-config” realizar las siguientes acciones:

  • Update the Raspi config tool (Advanced Options)
  • Enable SSH (Advanced Options)
  • Disable overscan. (Advanced Options)
  • Cambiar el boot para Desktop Enviroment

2- Actualizar el sistema con los comandos:
sudo apt-get update
sudo apt-get upgrade

3- Instalar el navegador Epiphany, las utilidades del servidor X11 y “unclutter” que esconde el cursor de la pantalla
sudo apt-get install epiphany-browser x11-xserver-utils xautomation unclutter

4- Crear el shell script “/home/pi/fullscreen.sh”
nano /home/pi/fullscreen.sh
Poner el siguiete contenido:
sudo -u pi epiphany-browser -a -i –profile ~/.config URL –display=:0 &
sleep 15s;
xte “key F11” -x:0
(cambiar URL por la dirección de la página que se desea abrir)

Darle permiso de ejecución a este shell script con el comando:
sudo chmod 755 /home/pi/fullscreen.sh

5- Editar el archivo del autostart para ejecutar el script:
sudo nano ~/.config/lxsession/LXDE-pi/autostart
Que debe de tener el siguiente contenido:
@xset s off
@xset –dpms
@xset s noblank
@/home/pi/fullscreen.sh

Mis Notas de Raspberry Pi

Si vamos a usar el Raspberry Pi significa que fundamentalmente vamos a trabajar en Linux, eso quiere decir que necesitamos saber algunos comandos básicos de Linux y algunas herramientas como es el trabajo con el editor de texto “nano” muy útil a la hora de editar archivos de configuraciones.

Para mi la mejor forma de trabajar con el Raspberry Pi es accediendo remotamente para ello lo más recomendable es poner una IP estática y activar el servidor SSH, estas dos operaciones tienen que hacerse localmente usando un monitor conectado por HDMI y teclado.

Poner IP estática.
Editar el fichero “interfaces” con el comando:
sudo nano /etc/network/interfaces
Buscar la linea “iface eth0 inet dhcp” y cambiar para “iface eth0 inet static”
Luego debajo de esta linea adicionar las siguientes lineas:
address 192.168.1.13
netmask 255.255.255.0
gateway 192.168.1.1
En este ejemplo la ip que se le asignó es 192.168.1.13, máscara 255.255.255.0 y gateway  192.168.1.1
Nota: Verificar que antes de la línea “iface eth0 inet static” esté la línea “auto eth0”

Para configurar los servidores DNS basta con editar el archivo “/etc/resolv.conf”, por ejemplo para configurar los servidores dns de Google basta con poner estas dos líneas:
nameserver 8.8.8.8
nameserver 8.8.4.4


Activar SSH.
Escribir el comando:
sudo raspi-config
Escoger la opción 8 (Advance Options) y luego la opcion A4 (SSH), seguir el procedimiento para habilitar el SSH. Luego de que esta activo el SSH es posible entrar desde cualquier PC utilizando un cliente SSH,  en mi opinión el mejor cliente es MobaXterm.


Desactivar el Modo Gráfico
Si estoy accediendo remotamente entonces  el modo gráfico no va a ser usado por lo que es recomendable desactivarlo para que no consuma recursos inecesarios. Para ello mediante la configuración (sudo raspi-config) escoger la opcion 3 (Enable Boot to Desktop/Scratch) y luego escoger la primera opción.


Actualizar Linux
Antes de continuar es muy recomendable actualizar Linux con los comandos:
sudo apt-get update
sudo apt-get upgrade


Adicionar usuario
sudo adduser username
Se preguntará por la contraseña dos veces, luego se pedirán otros datos del usuario que pueden dejarse en blanco simplemente presionando enter.
Luego es necesario editar los permisos del usuario, con el comando visudo que abrirá el fichero en el que se ponen los permisos:
sudo visudo
Adicionar en la sesión “# User privilege specification” la siguiente línea:
username ALL=(ALL:ALL) NOPASSWD: ALL


 

[Articulo en Construcción]